想象一下你有一个带有子目录'A / mySubDir'的回购'A',你想把'A / mySubDir'分成一个新的回购'B'
git init B
cd <repo A>
git subtree split --prefix==A/mySubDir --branch=split
git push 'B' split:master
假设回购'A'上的HEAD现在是12fe。我更新'A / mySubDir'中的一些文件。
当'A / mySubDir'中的文件发生变化时,如何让'B'保持最新状态?
git subtree split --prefix==A/mySubDir --branch=split 12fe..
以错误结尾: 分支'拆分'不是提交'XXXX'的优先级
是否有人对此有所了解。
此致 格特
答案 0 :(得分:3)
您已经完成了第一步(拆分了A
个回购站),但是您没有将B
回复列回A,如“Using Git subtrees for repository separation”中所述:
以下是适用于A/mySubDir - B
情况的摘录:
在主存储库中,您需要删除已拆分的原始文件,然后将远程存储库添加为子树。
删除您拆分的整个目录,然后提交。
git rm -r A/muSubdir
git commit -am "Remove split code."
将新的共享存储库添加为远程
git remote add B /url/to/B.git
现在将远程存储库添加为子树
git subtree add --prefix=A/mySubDir --squash shared master
注意:我们使用
-–squash
开关,因为我们可能只想要一个代表共享模块版本X
的快照提交,而不是使我们自己的提交历史记录与虚假上游错误修复提交复杂化。当然,如果你想要整个历史,那么可以随意离开那个开关。您现在拥有基于上游存储库的子树。好的。
在图像中,您可以看到底部提交是包含所有上游代码的压缩提交,并且它与您的代码合并。
重要提示:不要试图改变此。按原样推动。
如果您进行rebase,那么当您执行下一个subtree pull
时,git子树将无法协调提交。到目前为止一切顺利。但是,如果您无法从上游存储库接收更改,则这没有多大用处。幸运的是,这很容易。
要从上游存储库中提取更改,只需使用以下命令:
git subtree pull --prefix=A/mySubDir --squash shared master
(您正在将所有较新的上游提交压缩为一个,然后将其合并到您的存储库中。)
重要提示:如上所述,请不要重新提交这些提交。
为上游存储库提供更改非常简单:
git subtree push --prefix=A/mySubDir --squash shared master