将两个类似的远程git回购合并为一个
我做了一些搜索,读了一本git书籍和一些web上的地方,比如git by example,但我找不到正确的方法 我有两个git回购,它们位于两台不同的机器上。这些git repo中的每一个都持有一个程序的配置。比较两个回购协议时,配置的某些部分相同,而某些部分不同 我们要做的是创建第三个存储库,并将其他两个存储库的内容合并到这个新存储库中。我希望通过这样做可以实现一个存储库,其中包含来自其他两个回购协议的所有数据,但只有一个副本。通过这种方式,我们希望git能告诉我们这两种回购协议的不同之处,并将这些变化合并为一种 希望这很容易理解 我尝试过创建一个新的git repo,对一台服务器进行git克隆,创建一个新的分支和 做另一个回购协议的git克隆,然后让git合并它们。我也尝试过子树合并,但这两种方法都没有产生我想要的结果 第一个示例简单地说,删除所有文件并添加一组新文件。这不是我们想要的,我们想要一个git存储库,其中包含两个远程回购合并后生成的配置的一个副本 如果有人能帮助解决这个问题,我们将不胜感激将两个类似的远程git回购合并为一个,git,version-control,Git,Version Control,我做了一些搜索,读了一本git书籍和一些web上的地方,比如git by example,但我找不到正确的方法 我有两个git回购,它们位于两台不同的机器上。这些git repo中的每一个都持有一个程序的配置。比较两个回购协议时,配置的某些部分相同,而某些部分不同 我们要做的是创建第三个存储库,并将其他两个存储库的内容合并到这个新存储库中。我希望通过这样做可以实现一个存储库,其中包含来自其他两个回购协议的所有数据,但只有一个副本。通过这种方式,我们希望git能告诉我们这两种回购协议的不同之处,并
顺便说一句,两个repos数据都由相同的文件组成,文件名相同,但内容略有不同。如果我们假设repos被称为A和B,您可以从将A或B克隆到C开始:
$ git clone git://path/to/A.git
现在C与A相同(A是C的起源)。我们现在可以将B作为远程添加到C,并创建跟踪B主分支的跟踪分支masterB:
$ git remote add B git://another/path/to/B.git
$ git fetch B
$ git checkout --track masterB B/master
现在C的主分支与A的主分支相同,B的主分支与B上的主分支相同。我们现在可以将主分支合并到主分支中:
$ git checkout master
$ git merge masterB
$ .. solve conflicts
除非您需要跟踪原始存储库,否则我们可以使用:
$ git remote rm origin
$ git remote rm B
$ git branch -d masterB
您将有两个不同的分支机构来自两个回购协议。假设他们是
repo1/master
repo2/master
此时,我将合并它们并解决冲突,使其代表一种回购协议。然后,我会再次进行合并,这次选择另一个回购协议作为主回购协议,以防发生任何冲突。您现在将拥有:
common1
common2
分支机构。使用“我们的”策略将common2合并为common1。现在对另一个也这样做。这将捕获历史中的一个公共点,并防止配置差异在后续合并中给您带来问题。这本质上是让一方将另一方视为一个开发分支
希望这能有所帮助。将两个类似的回购合并为一个非常简单
听起来您需要创建一个人工的共同祖先,将两个回购的历史重设基/移植到它上,然后合并两个生成的分支。问题的可能重复之处在于,如果所有文件都相同,事情就会发生冲突。+1工作得很好。尽管git签出--track…失败了一个致命的错误:缺少分支错误。改为使用
git checkout-b master b/master
,看起来效果不错。