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

4
我希望将一个本地的Git仓库复制到另一个已经存在的Git仓库的子目录中,并保留完整的历史记录。我已经尝试过:
cd already-existing-target-repo/
git subtree add -P modules/rocket-module C:/DEV/java/repositories/rocket-module.git/  master

但该命令不会导入提交历史记录。
我还考虑过从这里尝试一种方法,其中源存储库被添加为目标存储库的远程,包括后续的检出和移动步骤。但不幸的是,有几个文件具有相同的名称(即pom.xml)。
如何保留提交历史记录?

1
git log --follow -- modules/rocket-module 将显示子树的历史记录。 - phd
博士,我可以在标准的 git checkout <commit> 命令中使用那些子树提交哈希吗? - mike
对我来说可以。我尝试了 git showgit checkout - phd
1个回答

2
手头的细节不重要,我使用git-filter-branch成功地将被导入仓库中的所有提交路径移动到它们的新路径,并使用 git merge --allow-unrelated-histories 将新子目录中的提交合并到主仓库的提交历史记录中。

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

这个Stack Overflow帖子总结了这个过程并提供了一些脚本: https://dev59.com/Q3I-5IYBdhLWcg3wxbjv#43345686 - 页面上还有其他可能有效的方法;我已经成功地用了这个方法处理了很多仓库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接