结合不相关的git存储库保留历史/分支

jor*_*reg 11 git

我们有3个独立的git存储库(每个都有一些分支),我们希望将它们合并为一个保存完整的历史记录和访问分支的能力,如下所示:

所以这就是我们所拥有的.3回购:

/A/.git
/B/.git
/C/.git
Run Code Online (Sandbox Code Playgroud)

我们想要一个包含3个子目录的超级仓库:

super/.git
super/A
super/B
super/C
Run Code Online (Sandbox Code Playgroud)

并说当切换到分支feature1(最初在repo B中,在repo C尚不存在的时候引入)我们期望结果是:

super/.git
super/A
super/B
Run Code Online (Sandbox Code Playgroud)

我们已经读过组合多个git存储库,但是使用git-stitch-repo时遇到了麻烦,它基本上只是宣传了super-repo中缺少大量的提交(没有任何可能指向问题的错误消息).

知道我们在这里做错了什么吗?

编辑 我们知道子模块和子树合并,但两者都不是一个选项.这应该是一次性操作.我们需要一次又一次加入repos.

编辑 可能是一个更简单的方法来提出基本相同的问题:说我们有一个回购与3个完全无关的分支.我们可以将它们合并而没有冲突到一个分支(因为它们不共享文件).现在,在查看历史时,我们会看到3个不相关的提交分支以及它们聚集在一起的一个点.但我们希望看到的是一个由所有3个分支的交错(按日期/时间)提交组成的分支.

bry*_*mcd -1

也许最简单的方法是使用子模块。它并不完全符合您想要实现的情况,但它非常接近并且不太容易令人头痛。

只需创建一个新目录并将其 git init 作为您的“超级”存储库。然后使用上面链接中给出的命令添加您的 A、B 和 C 存储库。