我刚刚遇到了这个问题,最终弄清楚了发生了什么:当您通过HTTP和
write-through proxying
,建议
post-commit
挂钩运行
svnsync
在后台。一旦SVN服务器完成,通过HTTP提交就完成了,但是在您正在读取的HTTP代理被更新到新版本之前。
git-svn
如果控制SVN代理配置,则可以使
斯文同步
同步(这对我有效了很长一段时间,直到有人对我的配置更改感到惊讶)。否则我想
吉特svn
diff --git a/git-svn.perl b/git-svn.perl
index 09c4ca5..af9aea1 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -57,6 +57,7 @@ use File::Spec;
use File::Find;
use Getopt::Long qw/:config gnu_getopt no_ignore_case auto_abbrev/;
use IPC::Open3;
+use Time::HiRes qw/usleep/;
use Git;
BEGIN {
@@ -574,7 +575,17 @@ sub cmd_dcommit {
$gs->{inject_parents_dcommit}->{$cmt_rev} =
$parents->{$d};
}
- $_fetch_all ? $gs->fetch_all : $gs->fetch;
+ my $retry;
+ fetch: for ($retry = 0; $retry < 30; ++$retry) {
+ $_fetch_all ? $gs->fetch_all : $gs->fetch;
+ last fetch if ($gs->rev_map_max >= $cmt_rev);
+ # Asynchronous commit push not complete
+ usleep(20000 * ($retry + 1));
+ }
+ if ($retry > 0 && $gs->rev_map_max < $cmt_rev) {
+ fatal "New revision $cmt_rev did not appear",
+ "in repository after $retry retries.";
+ }
$last_rev = $cmt_rev;
next if $_no_rebase;
$
如果这仍然是一个好主意今晚我将提交一个补丁。
更新:当我使用这个时,我得到了:
Author: syncuser <syncuser@d3ff0b4f-3c2c-0410-a809-ba59474314df>
就我自己的一个承诺。因此,在脚本看到部分同步的情况下,可能仍然存在竞争条件。这很烦人,但不是致命的。