如何保持推送/拆分的子树是最新的?

Ger*_*ert 5 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
Run Code Online (Sandbox Code Playgroud)

假设 repo 'A' 上的 HEAD 现在是 12fe。我更新了“A/mySubDir”中的一些文件。

当“A/mySubDir”中的文件发生变化时,如何使“B”保持最新?

git subtree split --prefix==A/mySubDir --branch=split 12fe..
Run Code Online (Sandbox Code Playgroud)

以错误结尾说:分支“拆分”不是提交“XXXX”的锚

有没有人对此有胶水。

问候, 格特

Von*_*onC 5

您已经完成了第一步(拆分您的Arepo),但是您还没有将Brepo 放回 A,如“使用 Git 子树进行存储库分离”中所述:

这是一个摘录,适合您的A/mySubDir - B情况:

将存储库添加为主存储库的子树

在您的主存储库中,您需要删除您拆分的原始文件,然后将远程存储库添加为子树。

删除您从中拆分的整个目录,然后提交。

git rm -r A/muSubdir
git commit -am "Remove split code."
Run Code Online (Sandbox Code Playgroud)

将新的共享存储库添加为远程

git remote add B /url/to/B.git
Run Code Online (Sandbox Code Playgroud)

现在将远程存储库添加为子树

git subtree add --prefix=A/mySubDir --squash shared master
Run Code Online (Sandbox Code Playgroud)

注意:我们使用-–squashswitch 是因为我们可能只想要一个代表X共享模块版本的快照提交,而不是用虚假的上游错误修复提交使我们自己的提交历史复杂化。当然,如果您想要整个历史记录,请随时关闭该开关。

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

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

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

重要说明:不要试图重新设置此. 按原样推它。
如果您变基,则 git subtree 将无法在您执行下一个subtree pull.

到现在为止还挺好。但是,如果您无法从上游存储库接收更改,则这没有多大用处。幸运的是,这很容易。

拉动上游变化

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

git subtree pull --prefix=A/mySubDir --squash shared master
Run Code Online (Sandbox Code Playgroud)

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

将更改推送到上游存储库

向上游存储库贡献更改非常简单:

git subtree push --prefix=A/mySubDir --squash shared master
Run Code Online (Sandbox Code Playgroud)