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