我有一个git
仓库R1
和一个子模块S1
,后者有两个分支master
和localpatches
。
让Q
代表S1
子模块的源仓库(换句话说,Q
是最初创建{{ git submodule add ...
中的1}}子模块。
出于这个问题的目的,您可以假设S1
的{{1}}分支是其R1
分支的直接后代。
此外,您可能会假设S1
的{{1}}分支中的所有提交都来自localpatches
,而master
范围内的提交仅存在于{ {1}}。
现在,我还有一个单独的S1
存储库master
,它与Q
完全不同。 (这是指master..localpatches
和S1
没有共同的提交,他们有不同的贡献者,它们的相关工作树是完全不同的,等等。)
我想知道向git
添加子模块R2
的最简洁方法,使其成为R1
的{{1}}子模块的副本。特别是(1)R1
的源存储库也应为R2
; (2)S2
应该有两个分支R2
和S1
; (3)R1
和S2
的{{1}}(分别为Q
)分支中的提交应该相同。
(如果我错了,请纠正我,但是这些要求中的第一个(即S2
的源仓库应该是master
)反对仅仅通过创建localpatches
在master
中运行localpatches
。)
(如果很重要,您可以假设S1
回购已过时/已失效。这尤其意味着S2
和S2
之间将来的分歧问题很无聊。)
答案 0 :(得分:1)
R2
git submodule add <path to Q> S2
中添加子模块cd S2
S1
中的R1
添加为远程git remote add S1 <path to R1>/S1
git fetch S1
git checkout -b localpatches S1/localpatches
git remote remove S1
现在S2具有与S1相同的提交。我展示了此解决方案是因为您提到到R1 / S1的链接对您而言并不重要。
如果要多次执行此操作,或者要在S1和S2之间共享代码。最好创建Q.的分支(甚至可以是本地的),并将您的分支添加为S1和S2的远程对象。