我想将一个(本地)Git存储库复制到另一个已经存在的Git存储库的子目录中,同时保持历史记录不变。
我已经尝试过
cd already-existing-target-repo/
git subtree add -P modules/rocket-module C:/DEV/java/repositories/rocket-module.git/ master
但是该命令不会导入提交历史记录。
我还考虑过尝试使用here中的一种方法,其中将源存储库添加为目标存储库的远程存储,包括子序列检出和移动步骤。但是很遗憾,有几个文件具有相同的名称(即pom.xml)。
如何保存提交历史记录?
答案 0 :(得分:1)
充分利用细节,我已经成功地使用git-filter-branch
将导入的回购中的所有提交路径移动到了新路径,然后git merge --allow-unrelated-histories
将提交合并到了新路径中。将新的子目录添加到主存储库的提交历史记录中。
如果您还需要更新源代码更改(例如包含路径),则必须过滤要导入的仓库中的分支,转换包含路径(我使用了几个小的Perl脚本来遍历树并进行更改),在旧存储库中提交更改,然后合并到主存储库中。
此Stack Overflow帖子总结了该过程并提供了一些脚本来执行此操作:https://stackoverflow.com/a/43345686/39791-页面上还有其他方法也可以使用;我已经成功地将它用于许多仓库。