您已经完成了第一步(拆分您的存储A
库),但您还没有将存储库B
放回 A,如“使用 Git 子树进行存储库分离”中所述:
这是一个摘录,适合您的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
共享模块版本的快照提交,而不是让我们自己的提交历史与虚假的上游错误修复提交复杂化。当然,如果您想要整个历史记录,请随时关闭该开关。
您现在拥有基于上游存储库的子树。好的。
在图像中,您可以看到底部提交是包含所有上游代码的压缩提交,它与您的代码合并。
重要提示:不要试图重新设置此. 按原样推。
如果你变基, git subtree 将无法在你执行 next 时协调提交subtree pull
。
到目前为止,一切都很好。但如果您无法从上游存储库接收更改,这并没有多大用处。幸运的是,这很容易。
拉取上游变更
要从上游存储库中提取更改,只需使用以下命令:
git subtree pull --prefix=A/mySubDir --squash shared master
(您将所有较新的上游提交压缩为一个,然后将合并到您的存储库中)。
重要提示:如上所述,不要对这些提交进行变基。
将更改推送到上游存储库
为上游存储库贡献更改非常简单:
git subtree push --prefix=A/mySubDir --squash shared master