Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将两个类似的远程git回购合并为一个_Git_Version Control - Fatal编程技术网

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

将两个类似的远程git回购合并为一个,git,version-control,Git,Version Control,我做了一些搜索,读了一本git书籍和一些web上的地方,比如git by example,但我找不到正确的方法 我有两个git回购,它们位于两台不同的机器上。这些git repo中的每一个都持有一个程序的配置。比较两个回购协议时,配置的某些部分相同,而某些部分不同 我们要做的是创建第三个存储库,并将其他两个存储库的内容合并到这个新存储库中。我希望通过这样做可以实现一个存储库,其中包含来自其他两个回购协议的所有数据,但只有一个副本。通过这种方式,我们希望git能告诉我们这两种回购协议的不同之处,并

我做了一些搜索,读了一本git书籍和一些web上的地方,比如git by example,但我找不到正确的方法

我有两个git回购,它们位于两台不同的机器上。这些git repo中的每一个都持有一个程序的配置。比较两个回购协议时,配置的某些部分相同,而某些部分不同

我们要做的是创建第三个存储库,并将其他两个存储库的内容合并到这个新存储库中。我希望通过这样做可以实现一个存储库,其中包含来自其他两个回购协议的所有数据,但只有一个副本。通过这种方式,我们希望git能告诉我们这两种回购协议的不同之处,并将这些变化合并为一种

希望这很容易理解

我尝试过创建一个新的git repo,对一台服务器进行git克隆,创建一个新的分支和 做另一个回购协议的git克隆,然后让git合并它们。我也尝试过子树合并,但这两种方法都没有产生我想要的结果

第一个示例简单地说,删除所有文件并添加一组新文件。这不是我们想要的,我们想要一个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。现在对另一个也这样做。这将捕获历史中的一个公共点,并防止配置差异在后续合并中给您带来问题。这本质上是让一方将另一方视为一个开发分支


希望这能有所帮助。

将两个类似的回购合并为一个非常简单

  • 创建裸回购协议

  • git将远程repo1添加到裸repo中

  • git将repo1的master合并到裸repo中

  • git将远程repo2添加到裸repo中

  • git将repo2的主文件合并到裸repo中

  • repo1和repo2的git rm远程

  • 将裸repo推送到服务器上


  • 听起来您需要创建一个人工的共同祖先,将两个回购的历史重设基/移植到它上,然后合并两个生成的分支。问题的可能重复之处在于,如果所有文件都相同,事情就会发生冲突。+1工作得很好。尽管git签出--track…失败了一个致命的错误:缺少分支错误。改为使用
    git checkout-b master b/master
    ,看起来效果不错。