代码之家  ›  专栏  ›  技术社区  ›  Justin Grant

如果两个客户机git svn rebase和git推送到同一个git repo,则会出现竞争条件?

  •  1
  • Justin Grant  · 技术社区  · 15 年前

    如果两个客户端同时尝试svn rebase和push,那么svn rebase和push从多个客户端到同一Git repo是否容易受到竞争条件的影响?

    这里有更多信息:我正在设置一个SVN项目的GitHub托管镜像。为了进行镜像,我将每隔几分钟运行一次cron作业(每个 this article ):

    git svn rebase
    git.exe push origin master
    

    为了冗余,我想让另一台服务器运行相同的cron作业。但面对这样的种族状况,这种情况会有所突破吗?

    • 两台服务器几乎同时恢复平衡。一个人会 git push 更改和另一个将尝试推送相同的更改。
    • 一个服务器重新签入,然后有一个SVN签入,然后另一个服务器重新签入并快速推送新签入,然后第一个速度较慢的服务器尝试推送一个签入。

    如果后面的操作只是返回一个no-op(也称为“一切都是最新的”),则是需要的。如果冲突推送失败也可以,只要它的cron作业稍后在不冲突的tmie上再次运行,那么它就可以正常工作。

    不好的是,两台服务器上的本地repo是否都能进入需要手动干预的失败状态。如果这种失败是可能的,我应该如何改变上面的命令,使他们自我恢复?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Greg Hewgill    15 年前

    我认为你这样做不会遇到任何特别的问题。默认情况下,使用Git推送到一个裸存储库中不允许非“快速向前”推送,因此如果发生任何冲突,那么推送将暂时失败。(下一个,如果当时没有冲突,就会成功。)

    这些情况应该很容易让您手动测试,方法是运行以下序列:

    Instance A            Instance B
    ----------            ----------
    git svn rebase
                          git svn rebase
    git push
                          git push
    

    Instance A            Instance B
    ----------            ----------
    git svn rebase
                          git svn rebase
                          git push
    git push