竞争条件如果两个客户端git svn rebase和git推送到同一个git repo?

时间:2010-10-06 20:36:44

标签: git github git-svn

如果两个客户端都尝试svn-rebase并同时推送,那么从多个客户端到同一个Git仓库的svn-rebasing-and-push是否容易受到竞争条件的影响?

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

git svn rebase
git.exe push origin master

为了冗余,我想让另一台服务器运行相同的cron作业。但面对这样的竞争条件,这会打破吗?

  • 两台服务器几乎在同一时间下降。一个将git push更改,另一个将尝试推动相同的更改。
  • 一台服务器重新启动,然后是SVN签入,然后另一台服务器重新启动并快速推送新的签入,然后第一台较慢的服务器试图推送一张签到。

如果后面的操作只返回no-op(又名“Everything up-to-date”),则需要。如果冲突的推送失败也是可以的,只要它的cron作业稍后在非冲突的tmie中再次运行,那么它将正常工作。

不正常的是,任一服务器上的本地存储都可能进入需要手动干预的失败状态。如果可能出现这种类型的故障,我应该如何更改上面的命令以使它们自我恢复?

1 个答案:

答案 0 :(得分:2)

我认为你不会遇到任何特殊问题。默认情况下,使用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