我想将一个(本地)Git 存储库复制到另一个已经存在的 Git 存储库的子目录中,同时保持历史完整。
我已经试过了
cd already-existing-target-repo/
git subtree add -P modules/rocket-module C:/DEV/java/repositories/rocket-module.git/ master
但该命令不会导入提交历史。
我还考虑过尝试 here 中的方法,其中源存储库作为远程存储库添加到目标存储库,包括后续的 checkout 和移动步骤。但不幸的是,有几个同名文件(即 pom.xml)。
如何保留提交历史记录?
最佳答案
重要的细节,我已经成功地完成了这个过程,使用 git-filter-branch
将正在导入的 repo 中的所有提交路径移动到它们的新路径,然后 git merge --allow-unrelated-histories
将新子目录中的提交 merge 到主存储库的提交历史中。
如果您还需要更新源更改(如包含路径),则必须过滤正在导入的存储库中的分支,转换包含路径(我使用了几个小的 Perl 脚本来遍历树并进行更改),提交旧仓库中的更改,然后 merge 到主仓库中。
这篇 Stack Overflow 帖子总结了该过程并提供了一些脚本来执行此操作:https://stackoverflow.com/a/43345686/39791 - 页面上还有其他方法也可能有效;我已经成功地将这个用于许多 repo 协议(protocol)。
关于git - 将 Git 存储库复制到具有提交历史记录的现有存储库的子目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55540224/