我在两个不相关的云位置中有两个git远程存储库。这些存储库包含不同的提交历史记录。
我们最终在Repo2和Repo1中都添加了一些新代码。但是现在我们想将代码并行推送到两个存储库中。
所以,我的问题是:
答案 0 :(得分:0)
涉及三个回购协议:
由于您的本地PC上可能同时存在这两个存储库,因此我建议将该存储库目录名称重命名为myrepo.backup
或类似名称,然后执行以下操作重新开始:
Repo1
克隆到新的本地目录(克隆所有分支,而不仅仅是母版)Repo2
作为新的远程服务器,因此本地存储库具有两个远程服务器Repo2
获取所有内容。获取所有内容时,请确保为所有远程存储库创建跟踪分支,其外观应如下所示:
master
-您的本地跟踪参考Repo1/master
-Repo1上的远程主分支的跟踪参考Repo2/master
-Repo2上的远程主分支的跟踪参考如果master分支在两个存储库之间分叉,则可能看起来像这样:
o-o-o-o-o-o-o-o-o-o-o
\ \-master \- Repo1/master
\
\o-o-o-o
\- Repo2/master
master
分支。旨在显示仅包含一个分支的示例,但是需要为每个分支做出相同的决定。这时,您将在两个存储库中的所有本地存储库中显示所有历史记录。您所需要做的就是决定如何处理分支之间的任何差异。
例如,您可以快进本地master
分支以匹配Repo1/master
,然后在与Repo2/master
相同的提交中创建具有不同名称的本地分支,例如master2
,如果您希望两个历史继续单独存在。
或者,如果您希望替代分支停止并且不被进一步处理,则只需添加标签而不是使其成为分支即可。仍然会使用正确的命令将其推送到存储库,但是标记它可以用来表明它不是应该添加的实时分支(尤其是如果标记为END_OF_DUPLICATE_master
之类的话)
或者,您可以将Repo2/master
合并到Repo1/master
中,创建一个新的提交,该提交将所有从Repo2进行的更改合并到Repo1 master分支中,但是保留所有历史记录,并且现在有了一个合并的master分支。
解决此问题的另一种方法是将Repo2 master分支重新建立到Repo1 master分支上-是否压缩,取决于您是否要保留该特定历史记录。
然后对存在的所有其他分支重复相同的决定。最后,请确保您已将本地分支或标签移至最新提交并显示在所有现有分支中,然后将所有本地分支和标签推回两个存储库,它们将被同步。
现在,所有这一切,我真的强烈建议您仅拥有一个主要仓库。但是,如果由于权限差异而需要单独的存储库,则谁可以访问每个存储库之类的东西,我会考虑使用分叉机制(在Github,Gitlab和Bitbucket上可用)。
如果此描述不够清楚,请搜索如何管理叉式存储库中的工作以及如何将origin
(分支)与upstream
(原始存储库)同步),因为这与您尝试执行的操作大致相同。