将Git存储库复制到具有提交历史记录的现有存储库的子目录中

时间:2019-04-05 16:57:47

标签: git git-bash git-subtree

我想将一个(本地)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)。

如何保存提交历史记录?

1 个答案:

答案 0 :(得分:1)

充分利用细节,我已经成功地使用git-filter-branch将导入的回购中的所有提交路径移动到了新路径,然后git merge --allow-unrelated-histories将提交合并到了新路径中。将新的子目录添加到主存储库的提交历史记录中。

如果您还需要更新源代码更改(例如包含路径),则必须过滤要导入的仓库中的分支,转换包含路径(我使用了几个小的Perl脚本来遍历树并进行更改),在旧存储库中提交更改,然后合并到主存储库中。

此Stack Overflow帖子总结了该过程并提供了一些脚本来执行此操作:https://stackoverflow.com/a/43345686/39791-页面上还有其他方法也可以使用;我已经成功地将它用于许多仓库。