3 回答
TA贡献1831条经验 获得超10个赞
如果您想保留第二个存储库的确切提交历史记录,因此也保留了将来轻松合并上游更改的功能,那么这就是您想要的方法。它导致子树的未修改历史记录被导入到您的仓库中,加上一个合并提交将合并的存储库移动到子目录。
git remote add XXX_remote <path-or-url-to-XXX-repo>
git fetch XXX_remote
git merge -s ours --no-commit --allow-unrelated-histories XXX_remote/master
git read-tree --prefix=ZZZ/ -u XXX_remote/master
git commit -m "Imported XXX as a subtree."
您可以跟踪上游更改,如下所示:
git pull -s subtree XXX_remote master
Git在进行合并之前会根据其自身的位置计算出来,因此您无需在后续合并中指定前缀。
2.9之前的Git版本:您不需要将--allow-unrelated-histories选项传递给git merge。
使用read-tree和跳过该merge -s ours步骤的另一个答案中的方法实际上与使用cp复制文件并提交结果没有什么不同。
TA贡献1808条经验 获得超4个赞
git-subtree
是一个脚本,专门用于将多个存储库合并为一个同时保留历史记录(和/或拆分子树历史,尽管这似乎与此问题无关)的用例。它自1.7.11发布以来作为git树的一部分进行分发。
要将<repo>
版本的存储库合并<rev>
为子目录<prefix>
,请使用git subtree add
以下命令:
git subtree add -P <prefix> <repo> <rev>
git-subtree 以更加用户友好的方式实现子树合并策略。
对于您的情况,在存储库YYY中,您将运行:
git subtree add -P ZZZ /path/to/XXX.git master
- 3 回答
- 0 关注
- 817 浏览
添加回答
举报