git - 将两个相似的远程 git repos merge 为一个

标签 git version-control

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

我有两个 git 存储库,分别位于两台不同的机器上。这些 git repos 中的每一个都包含程序的配置。当您比较这两个 repos 时,配置的某些部分相同而某些部分不同。

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

希望这很容易理解。

我已经尝试创建一个新的 git 仓库,对一台服务器进行 git 克隆,创建一个新分支,然后 对另一个仓库进行 git 克隆,然后要求 git merge 它们。我还尝试了子树 merge ,但这些都没有产生我想要的结果。

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

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

顺便说一下,这两个 repos 数据由具有相同文件名但内容略有不同的相同文件组成。

最佳答案

如果我们假设存储库称为 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的master分支与A的master分支相同,masterB分支与B上的master相同。我们现在可以将masterB merge 到master中:

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

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

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

关于git - 将两个相似的远程 git repos merge 为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6204133/

相关文章:

git 忽略多个匹配文件

git - 如何获取特定 Git 提交的文件 SHA?

git - 选择其他分支而不是 master 作为 AWS CodeBuild 上的源存储库

version-control - 在 Team Foundation Server 无基础合并中合并删除

java - Eclipse 多项目/单一存储库源代码控制选项

version-control - 我可以拆分 Mercurial 存储库吗?

git - .gitignore、git add 和文件神秘消失

Gitlab:未提供用户或 key

git - `git branch --list` 的唯一名称选项?

android - Git 忽略不在.gitignore、排除或配置文件中的目录