如何使推/拆分子树保持最新?

时间:2013-11-08 16:09:51

标签: git

想象一下你有一个带有子目录'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'的优先级

是否有人对此有所了解。

此致 格特

1 个答案:

答案 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的快照提交,而不是使我们自己的提交历史记录与虚假上游错误修复提交复杂化。当然,如果你想要整个历史,那么可以随意离开那个开关。

     

您现在拥有基于上游存储库的子树。好的。

http://makingsoftware.files.wordpress.com/2013/02/gitsubtreeadd_thumb.png?w=500&h=196

  

在图像中,您可以看到底部提交是包含所有上游代码的压缩提交,并且它与您的代码合并。

     

重要提示:不要试图改变此。按原样推动。
  如果您进行rebase,那么当您执行下一个subtree pull时,git子树将无法协调提交。

     

到目前为止一切顺利。但是,如果您无法从上游存储库接收更改,则这没有多大用处。幸运的是,这很容易。

拉动上游变化

  

要从上游存储库中提取更改,只需使用以下命令:

git subtree pull --prefix=A/mySubDir --squash shared master
  

(您正在将所有较新的上游提交压缩为一个,然后将其合并到您的存储库中。)
  重要提示:如上所述,请不要重新提交这些提交

将更改推送到上游存储库

  

为上游存储库提供更改非常简单:

git subtree push --prefix=A/mySubDir --squash shared master