如何将子模块从一个仓库复制到另一个仓库?
How to copy a submodule from one repo to another?
我有一个 git
repo R1
和一个子模块 S1
,后者有两个分支,master
和 localpatches
。
让 Q
代表 S1
子模块的源代码库(换句话说,Q
是最初创建 git submodule add ...
的参数S1
R1
中的子模块)。
出于这个问题的目的,您可以假设 S1
的 localpatches
分支是其 master
分支的直接后代。
此外,您可以假设 S1
的 master
分支中的所有提交都来自 Q
,而 master..localpatches
范围内的提交仅存在在 S1
.
现在,我还有一个单独的 git
存储库 R2
,它与 R1
完全不同。 (我的意思是 R1
和 R2
没有共同的提交,它们有不同的贡献者,它们相关的工作树完全不同,等等)
我想知道将子模块 S2
添加到 R2
的最简洁方法,使其成为 R1
的 S1
子模块的副本。特别是,(1) S2
的源代码库也应该是 Q
; (2) S2
应该有两个分支,master
和localpatches
; (3) S1
和 S2
的 master
(resp.localpatches
) 分支中的提交应该相同。
(如果我错了请纠正我,但是这些要求中的第一个(即 S2
的源代码库应该是 Q
)反对创建 S2
通过 运行 git submodule add <S1's URL>
在 R2
.)
(万一重要,您可以假设 R1
回购是 obsolescent/defunct。这特别意味着 S1
和 S2
没有实际意义。)
作为一次性操作
- 像往常一样创建回购
R2
- 从 Q 添加子模块
git submodule add <path to Q> S2
- 当你 cd 到一个子模块时你可以修改它
cd S2
- 在
R1
中添加 S1
作为远程 git remote add S1 <path to R1>/S1
- 获取
git fetch S1
- 创建分支
git checkout -b localpatches S1/localpatches
- 也许移除 S1 遥控器
git remote remove S1
现在 S2 与 S1 有相同的提交。我展示了这个解决方案,因为你提到 link 到 R1/S1 对你来说并不重要。
如果您想多次执行此操作或想在 S1 和 S2 之间共享代码。最好创建一个 Q 的分支(甚至可以是本地的)并将您的分支作为远程添加到 S1 和 S2。
我有一个 git
repo R1
和一个子模块 S1
,后者有两个分支,master
和 localpatches
。
让 Q
代表 S1
子模块的源代码库(换句话说,Q
是最初创建 git submodule add ...
的参数S1
R1
中的子模块)。
出于这个问题的目的,您可以假设 S1
的 localpatches
分支是其 master
分支的直接后代。
此外,您可以假设 S1
的 master
分支中的所有提交都来自 Q
,而 master..localpatches
范围内的提交仅存在在 S1
.
现在,我还有一个单独的 git
存储库 R2
,它与 R1
完全不同。 (我的意思是 R1
和 R2
没有共同的提交,它们有不同的贡献者,它们相关的工作树完全不同,等等)
我想知道将子模块 S2
添加到 R2
的最简洁方法,使其成为 R1
的 S1
子模块的副本。特别是,(1) S2
的源代码库也应该是 Q
; (2) S2
应该有两个分支,master
和localpatches
; (3) S1
和 S2
的 master
(resp.localpatches
) 分支中的提交应该相同。
(如果我错了请纠正我,但是这些要求中的第一个(即 S2
的源代码库应该是 Q
)反对创建 S2
通过 运行 git submodule add <S1's URL>
在 R2
.)
(万一重要,您可以假设 R1
回购是 obsolescent/defunct。这特别意味着 S1
和 S2
没有实际意义。)
作为一次性操作
- 像往常一样创建回购
R2
- 从 Q 添加子模块
git submodule add <path to Q> S2
- 当你 cd 到一个子模块时你可以修改它
cd S2
- 在
R1
中添加S1
作为远程git remote add S1 <path to R1>/S1
- 获取
git fetch S1
- 创建分支
git checkout -b localpatches S1/localpatches
- 也许移除 S1 遥控器
git remote remove S1
现在 S2 与 S1 有相同的提交。我展示了这个解决方案,因为你提到 link 到 R1/S1 对你来说并不重要。
如果您想多次执行此操作或想在 S1 和 S2 之间共享代码。最好创建一个 Q 的分支(甚至可以是本地的)并将您的分支作为远程添加到 S1 和 S2。