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

将Git存储库复制到具有提交历史记录的现有存储库的子目录中,git,git-bash,git-subtree,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 但该命令不导入提交历史记录 我还考虑尝试一种方法,将源存储库作为远程存储库添加到目标存储库,包括随后的签出和移动步骤。但不幸的是,

我想将一个(本地)Git存储库复制到另一个已经存在的Git存储库的子目录中,同时保持历史记录的完整性

我已经试过了

cd already-existing-target-repo/
git subtree add -P modules/rocket-module C:/DEV/java/repositories/rocket-module.git/  master
但该命令不导入提交历史记录

我还考虑尝试一种方法,将源存储库作为远程存储库添加到目标存储库,包括随后的签出和移动步骤。但不幸的是,有几个文件具有相同的名称(即pom.xml)


如何保存提交历史记录?

手动保存详细信息,我已成功使用
git filter branch
将repo中导入的所有提交路径移动到新路径,然后,
git merge——允许不相关的历史记录
将新子目录中的提交合并到主repo的提交历史记录中

如果还需要更新源代码更改(如include路径),则必须过滤正在导入的repo中的分支,转换include路径(我使用了两个小的Perl脚本遍历树并进行更改),提交旧repo中的更改,然后合并到主repo中


此Stack Overflow post总结了该过程,并提供了一些脚本:-页面上还有其他方法也可以使用;我已经成功地将此函数用于多次回购。

git log--follow--modules/rocket module
将显示子树的历史。@phd我可以在标准的
git checkout
命令中使用这些子树提交散列吗?对我很有用。我尝试了
git show
git checkout