【发布时间】:2011-09-27 20:39:26
【问题描述】:
我们有 3 个独立的 git 存储库(每个都有一些分支),我们希望将它们合并为一个,以保持完整的历史记录和访问分支的能力,如下所示:
所以这就是我们所拥有的。 3个回购:
/A/.git
/B/.git
/C/.git
我们希望拥有一个包含 3 个子目录的超级仓库:
super/.git
super/A
super/B
super/C
并说当切换到分支 feature1(最初在 repo B 中,在 repo C 尚不存在时引入)时,我们希望结果是:
super/.git
super/A
super/B
我们已经阅读了Combining multiple git repositories,但是在使用 git-stitch-repo 时遇到了麻烦,它基本上可以像宣传的那样工作,只是超级仓库中缺少大量提交(没有任何错误消息会指出问题)。
知道我们在这里做错了什么吗?
编辑 我们知道子模块和子树合并,但两者都不是一个选项。这应该是一次性操作。我们需要回购永远加入。
编辑 可能是提出基本相同问题的一种更简单的方法:假设我们有一个带有 3 个完全不相关的分支的仓库。我们可以将它们合并到一个分支而不会发生冲突(因为它们不共享文件)。现在,在查看历史时,我们会看到 3 个不相关的提交分支以及它们聚集在一起的一个点。但我们希望看到的是由所有 3 个分支的交错(按日期/时间)提交组成的一个分支。
【问题讨论】:
-
您是否尝试过该问题中建议的任何其他方法(组合多个 git 存储库)?那里有几个选项。
-
是的,我们做到了。他们似乎都没有做 git-stitch-repo 所做的事情,它真正按时交错提交,因此生成的 repo 完全感觉好像它从一开始就包含了所有部分。只是,如前所述,git-stitch-repo 会随机将文件排除在外..
-
好的,然后从每个分支的
git log --format=%d%H创建一个文件。将其通过 sort 然后传递到 xargs 并在新分支上 git cherry-pick 。你可能想先用 rebase 来展平历史。 -
鉴于您的最后评论,我添加了一个指向我编写的可以执行此操作的工具的链接;在处理大量分支并逐步执行此操作时,简单地重新设置和排序对我来说还不够
标签: git