首页 > 解决方案 > 将更改同时推送到两个存储库并且一个发生冲突时如何解决冲突

问题描述

我有一个带有如下配置文件的存储库:

[remote "origin"]
        url = git@bitbucket.org:abc/abc.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        pushurl = https://github.com/abc/abc-mirror
        pushurl = git@bitbucket.org:abc/abc.git

github 的 repo 是 bitbucket 的镜像。我对 github 进行了一些更改,并将其推送到 github 上。我还对 bitbucket 进行了一些更改,当我推送更改时,与 github 的 repo 存在冲突,但 bitbucket 没有问题。

在这种情况下,如何获取 github 的更改并解决冲突?

我相信我的问题可能会在 SO 的某个地方被问到,但我找不到。请告诉我。

提前致谢。

标签: git

解决方案


我的工作场所阻止了 bitbucket,但对 github 没有任何问题。

有两种方法可以解决这个问题。

最简单的是社交:要求 IT 将 Bitbucket 列入白名单。他们可能不是故意阻止它。要么他们正在使用白名单,但它不在其中,要么是一些过分热心的黑名单在某些 Bitbucket 存储库中发现了一些它认为不合适的东西,并将整个域列入黑名单。

不幸的是,这种情况很可能不会发生,因此技术解决方法是使用VPNSSH 隧道通过防火墙。VPN 最简单,在许多情况下都非常有用。SSH 隧道要求您在防火墙外运行 ssh 服务器。尽管如果 IT 真的过于热心,他们也会阻止 VPN 和传出 SSH。

最后,如果您可以将手机用作热点,则可以使用其互联网连接。

因此,我想在 github 上有一个镜像仓库,这样我就可以在工作时保持更改。我也喜欢我在 github 的 repo 上所做的任何更改也很容易进入 bitbucket 的 repo。我觉得你是对的。我把镜子的东西弄乱了。

如果您对两者进行更改,它们将“发散”。这是一种可管理的情况,但您必须将它们作为单独的遥控器进行管理。对于您的情况,这似乎没有必要。

相反,决定哪一个是镜子并坚持下去。听起来你更喜欢 Bitbucket,所以使用 Github 作为镜像。与其有两个 pushurl,不如将 Bitbucket 设置pushurlmirror. 然后当你push在 Github 上的任何东西都会被你的本地版本覆盖。

从 git-push 文档...

- 镜子

不是命名要推送的每个 ref,而是指定将 refs/ 下的所有 refs(包括但不限于 refs/heads/、refs/remotes/ 和 refs/tags/)镜像到远程存储库。新创建的本地 refs 会被推送到远端,本地更新的 refs 会在远端强制更新,删除的 refs 会从远端移除。如果设置了配置选项 remote.<remote>.mirror,这是默认设置。


推荐阅读