我有以下 git 存储库
- 回购协议
- 回购B
- 回购协议
我结合成
- repoAll 将每个 repo 移到子目录中
所以这看起来像
- 回购全部
- 目录
- 目录
- 目录
我已按照http://jasonkarns.com/blog/merge-two-git-repositories-into-one/上的说明进行操作。这基本上意味着
git remote add -f repoA /path/to/repoA
git merge -s ours --no-commit repoA/master
git read-tree --prefix=dirA/ -u repoA/master
git ci -m "merging repoA into dirA"
...
所以现在但是文件的历史不再连接,因为
git log --follow dirA/pom.xml
什么都不显示。
然而,
git log --follow pom.xml
确实显示了该文件的正确(旧)历史记录。这还不够好,因为没有像 eclipse 或其他 git 客户端这样的工具能够显示完整的历史记录。
更糟糕的是,在合并的 repo 上已经有新的提交,因此再次进行合并并不是一个真正的选择(我现在知道我应该在进行合并之前repoA/*
进入)。repoA/dirA
我曾考虑过在 repoAll 的初始合并之前插入一个提交,但这将需要我重新调整所有更改(现在是 100+)并解决更改。
问题/解决方案Git 日志在执行读取树合并后显示很少,如何重写历史记录以便所有文件(除了我已经移动的文件)都在子目录中?似乎只适用于整个存储库,而不适用于特定的子目录(或者至少如果你已经在 repoAll 上有新的提交)。
我认为应该有某种方法来重写特定子目录(例如 dirA)的历史,但我似乎无法弄清楚如何。