我需要将两个git存储库合并到一个新的存储库中,而不会丢失历史记录并保留功能分支和标记。
这似乎是一个已经多次解决的常见问题(例如https://github.com/unravelin/tomono或Merge two Git repositories without breaking file history)。
但是解决方案没有解决的问题是,我可以及时跳回来查看指定提交中的所有文件,其中存在两个子目录。
所以我想知道这样的事情是否可以用git实现。
这是我目前的设置:两个独立开发的存储库:
这些都是我们的构建系统(包括一些配置和数据目录)克隆并捆绑到rpm中
现在我想将两个存储库迁移到一个“monorepo”中,我还可以存储配置,以及其他基本的必需子目录。
如果我使用众多“merge x repos to a repo”中的一个-solutions,那么在查看该提交的目录树时,我将最终得到两种状态之一:
这也使得标签几乎无用。我想在任何提交时都可以看到app和lib。
很久以前,当从SVN迁移到git时,我通过读取这两个历史记录并“重放”提交来管理这样的事情,就好像子目录总是在那里一样。
有没有办法解决这个特殊问题,还是我真的不得不忍受丢失的标签和“不完整”的历史?
TLDR;经过另一整天的讨论,我解决了最不利的问题。来自https://stackoverflow.com/a/14470212/11126816的子树合并策略和来自https://stackoverflow.com/a/43340503/11126816的git filter-branch的组合
也许以下工具可以帮助其他人: