将两个类似的远程git repos合并为一个

时间:2011-06-01 15:58:53

标签: git version-control

我已经完成了一些搜索并阅读了一本git书和网上的一些地方,例如git,但是我找不到正确的方法来做到这一点。

我有两个git repos,它们位于两台不同的机器上。这些git repos中的每一个都保存程序的配置。比较两个repos时,配置的某些部分是相同的,而某些部分则不相同。

我们要做的是创建第三个存储库,并将其他两个存储库的内容合并到这个新存储库中。我希望通过这个实现的目的是拥有一个存储库,其中包含来自其他两个存储库的所有数据,但只有一个副本。这样,我们希望git会告诉我们两个repos之间有什么不同,并将这些变化合并为一个。

希望这很容易理解。

我试过创建一个新的git repo,做一个服务器的git克隆,创建一个新的分支和 做另一个repo的git克隆然后要求git合并它们。我也尝试了子树合并,这些都没有产生我想要的。

第一个例子,简单地说删除所有文件并添加一堆新文件。这不是我们想要的,我们想要一个git存储库,其中包含由于将两个远程存储库合并而产生的单个配置副本。

如果有人可以帮助解决这个问题,我们将不胜感激。

顺便说一下,两个repos数据都包含相同的文件名,但内容略有不同。

3 个答案:

答案 0 :(得分:21)

如果我们假设回购被称为A和B,您可以先将A或B克隆到C:

$ git clone git://path/to/A.git

现在C与A相同(A是C的原点)。我们现在可以将B作为远程添加到C并创建跟踪分支masterB,跟踪B的主分支:

$ git remote add B git://another/path/to/B.git
$ git fetch B
$ git checkout --track masterB B/master

现在C的主分支与A的主分支相同,masterB分支与B上的master分支相同。我们现在可以将masterB合并到master中:

$ git checkout master
$ git merge masterB
$ .. solve conflicts

除非您需要跟踪原始存储库,否则我们可以通过以下方式进行清理:

$ git remote rm origin
$ git remote rm B
$ git branch -d masterB

答案 1 :(得分:0)

您将有两个不同的分支来自两个回购。让我们说他们是

repo1/master
repo2/master

我会在这一点上合并它们并解决冲突,以便它代表一个回购。然后我会再次合并,这次选择其他回购作为主人,以防任何冲突。你现在将拥有:

common1
common2

分支。将common2与“我们的”策略合并到common1中。现在对另一个做同样的事情。这将捕获历史记录中的一个共同点,并保持配置差异不会给后续合并带来问题。这基本上让人看到另一个是开发分支。

希望这会有所帮助。

答案 2 :(得分:0)

将2个类似的回购合并为一个很简单。

  1. 创建一个裸仓库

  2. git将remote repo1添加到裸仓库

  3. git将repo1的主人合并到裸仓库

  4. git将remote repo2添加到裸仓库

  5. git将repo2的主人合并到裸仓库

  6. git rm remote of repo1和repo2

  7. 将裸仓库推到服务器上。