我的遥控器设置如下:
git remote set-url origin --push --add <a remote>
git remote set-url origin --push --add <another remote>
基于这个问题:pull/push from multiple remote locations
我团队中的其他人只能访问第一个回购。我有2台机器。我的第一台机器可以访问两个遥控器,如上所述。我的第二台机器只能访问第二台仓库。我的第一台机器git remote show origin
显示(基于上面的配置):
Fetch URL: <the_first_remote>
Push URL: <the_first_remote>
Push URL: <the_second_remote>
据我了解,您不能使用此方法获得两个抓取网址。从我的第一台机器开始,我通常对两个遥控器都执行git pull --rebase
和git push
,并在执行此操作时指定分支(在拉和推中都是这样)除了以下场景外,这种方式正常。在我只能访问第二个遥控器的第二台机器上,我将提交推送到第二个遥控器。与此同时,其他人仅将更改推送到第一个遥控器。在我的第一台机器上(两个遥控器都设置如上)我拉出两个更改并将它们推出以同步所有内容。此时我收到此错误消息
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart.
因此,我最终必须执行git pull
(不使用--rebase
)或git pull --no-commit
进行合并。日志最终显示合并提交。有什么方法可以避免这种情况吗?
答案 0 :(得分:3)
在您推送时自动自动推送所有这些网址时,通常只能将多个推送网址添加到单个遥控器。在这种情况下,最好使用两个单独的遥控器:
GodBinding [name=Zevs, age=320]
在你的第一台机器上,假设你在两个遥控器后面,请执行:
git remote add origin <first url>
git remote add gitlab <second url>
最后一行是修复错误的方法。由于您将提交重新定位到另一个用户的提交,因此您必须强制推送以更新第二个远程。
此外,请务必先拉出第二个远程 ,因为这样您就可以在本地进行提交,从而使git pull gitlab # --rebase should be unnecessary
git pull --rebase origin master
git push origin master
git push gitlab master --force-with-lease
能够按预期工作。
可视化:您的历史可能如下所示:
pull --rebase
第一个pull命令会快速转发您的本地 C [origin/master]
/
*--*--*--A [master]
\
B [gitlab/master]
以提交master
。第二个命令将历史转换为如下所示:
B
因此最后两个命令:快进推送到 B' [master]
/
C [origin/master]
/
*--*--*--A
\
B [gitlab/master]
,强制推送到origin
。
如果您已经例如以错误的顺序提取提交,您可以通过执行以下操作来解决此问题:
gitlab
然后按照上述步骤操作。