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

标签 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 中的方法,其中源存储库作为远程存储库添加到目标存储库,包括后续的 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/

相关文章:

git - 当尝试更新新创建的远程分支时,我得到 "rejected"

git - 如何强制子树推送覆盖远程更改?

git - 如何将带有子模块的 git 存储库 merge 到另一个带有子树 merge 的存储库中?

linux - git : Setting application environmental variables

java - maven资源插件错误

git - 从 git 存储库中删除旧的提交信息以节省空间

git-bash - 如何抑制 Git-for-Windows bash 中的路径扩展?

java - 在此系统 (mac) 上找不到 RPM 构建可执行文件 '/usr/bin/rpmbuild'

windows - 每次启动 git-bash 时都需要发出 ssh-agent 命令

git - 将文件拆分到单独的存储库中,保留历史记录