我已经完成了一些搜索并阅读了一本git书和网上的一些地方,例如git,但是我找不到正确的方法来做到这一点。
我有两个git repos,它们位于两台不同的机器上。这些git repos中的每一个都保存程序的配置。比较两个repos时,配置的某些部分是相同的,而某些部分则不相同。
我们要做的是创建第三个存储库,并将其他两个存储库的内容合并到这个新存储库中。我希望通过这个实现的目的是拥有一个存储库,其中包含来自其他两个存储库的所有数据,但只有一个副本。这样,我们希望git会告诉我们两个repos之间有什么不同,并将这些变化合并为一个。
希望这很容易理解。
我试过创建一个新的git repo,做一个服务器的git克隆,创建一个新的分支和 做另一个repo的git克隆然后要求git合并它们。我也尝试了子树合并,这些都没有产生我想要的。
第一个例子,简单地说删除所有文件并添加一堆新文件。这不是我们想要的,我们想要一个git存储库,其中包含由于将两个远程存储库合并而产生的单个配置副本。
如果有人可以帮助解决这个问题,我们将不胜感激。
顺便说一下,两个repos数据都包含相同的文件名,但内容略有不同。
答案 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个类似的回购合并为一个很简单。
创建一个裸仓库
git将remote repo1添加到裸仓库
git将repo1的主人合并到裸仓库
git将remote repo2添加到裸仓库
git将repo2的主人合并到裸仓库
git rm remote of repo1和repo2
将裸仓库推到服务器上。