【发布时间】:2012-10-14 00:08:14
【问题描述】:
我需要将两个 Git 存储库合并到一个全新的第三个存储库中。我发现了许多关于如何使用子树合并(例如How do you merge two Git repositories? 上的Jakub Narębski's answer)的描述,并且遵循这些说明大部分都有效,除了当我提交子树合并时,旧存储库中的所有文件都是记录为新添加的文件。当我执行git log 时,我可以从旧存储库中看到提交历史记录,但如果我执行git log <file>,它只会显示该文件的一个提交——子树合并。从上述答案的 cmets 来看,我并不是唯一一个看到这个问题的人,但我没有找到任何已发布的解决方案。
有什么方法可以合并存储库并保持单个文件历史不变?
【问题讨论】:
-
我没有使用 Git,但在 Mercurial 中,如果需要,我会先进行转换以修复要合并的存储库的文件路径,然后将一个存储库强制拉入目标以获取变更集,然后合并不同的分支。这是经过测试并且有效的;)也许这也有助于为Git找到解决方案......与子树合并方法相比,我猜转换步骤在重写历史而不是仅仅映射路径时是不同的(如果我理解正确)。这样可以确保顺利合并,而无需对文件路径进行任何特殊处理。
-
我也发现这个问题很有帮助stackoverflow.com/questions/1683531/…
-
我创建了一个后续问题。可能很有趣:合并两个 Git 存储库并保留主历史记录:stackoverflow.com/questions/42161910/…
-
对我有用的自动化解决方案是stackoverflow.com/a/30781527/239408
标签: git git-subtree