代码之家  ›  专栏  ›  技术社区  ›  jbeard4

git svn无法提交,即使在清除签出后也是如此

  •  7
  • jbeard4  · 技术社区  · 14 年前

    我正在尝试将git svn用于以下项目:

    https://svn.apache.org/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk/

    git svn clone https://svn.apache.org/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk/ -T trunk -b branches -t tags 召唤。

    git checkout -b 而不是 git svn branch ,然后将本地分支合并回主分支,并尝试进行数据提交。现在,奇怪的是,即使在做了一个干净的结账之后,当我试图提交数据时,我仍然有错误。

    以下相当长的跟踪代表了我当前使用git svn的工作流:

    jacob@jacob-laptop:~/workspace/gsoc2010/scxml-js$ git svn dcommit
    Committing to https://jbeard@svn.apache.org/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk ...
            M       build-common.xml
            M       src/xslt/backends/js/StateTableStatechartGenerator.xsl
            M       src/xslt/backends/js/SwitchyardStatechartGenerator.xsl
            M       src/xslt/ir-compiler/appendTransitionInformation.xsl
            M       src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl
            M       src/xslt/ir-compiler/flattenTransitions.xsl
            M       src/xslt/ir-compiler/nameTransitions.xsl
            M       src/xslt/ir-compiler/numberStatesAndTransitions.xsl
            M       src/xslt/ir-compiler/splitTransitionTargets.xsl
            M       src/xslt/util/language-frontend-module-generators/sh-from-topo-sort-list-generator.xsl
            M       src/xslt/util/topo-sort.xsl
    Committed r1037491
    W: 502073c202cb1fbe089f0e8b7100304f0aa74729 and refs/remotes/trunk differ, using rebase:
    :100644 100644 7930fd690be01a5716490704b5556e2b5cab5ba6 51047f2c8cf1daaa94ae44433a9aa2acc222ae43 M      build-common.xml
    :040000 040000 59251941b33bda1376881b33bb2263ea87b1b947 2f5e2586e26bc7d05def065cfcf05327982b81d7 M      src
    Current branch master is up to date.
    # of revisions changed
    before:
     39c6f7e2d7b82cc782b8770d1ddb0ecb4f86e780
    c5f360feb3a6bdaab2fb2f48d05e8691824e3231
    
    after:
     502073c202cb1fbe089f0e8b7100304f0aa74729
    39c6f7e2d7b82cc782b8770d1ddb0ecb4f86e780
    c5f360feb3a6bdaab2fb2f48d05e8691824e3231
     If you are attempting to commit  merges, try running:
             git rebase --interactive --preserve-merges  refs/remotes/trunk
    Before dcommitting
    jacob@jacob-laptop:~/workspace/gsoc2010/scxml-js$ git svn rebase
            M       build-common.xml
            M       src/xslt/ir-compiler/nameTransitions.xsl
            M       src/xslt/ir-compiler/copyEnumeratedEventTransitions.xsl
            M       src/xslt/ir-compiler/appendTransitionInformation.xsl
            M       src/xslt/ir-compiler/flattenTransitions.xsl
            M       src/xslt/ir-compiler/numberStatesAndTransitions.xsl
            M       src/xslt/ir-compiler/splitTransitionTargets.xsl
            M       src/xslt/backends/js/SwitchyardStatechartGenerator.xsl
            M       src/xslt/backends/js/StateTableStatechartGenerator.xsl
            M       src/xslt/util/language-frontend-module-generators/sh-from-topo-sort-list-generator.xsl
            M       src/xslt/util/topo-sort.xsl
    r1037491 = e8d820cfdca882a57fbfa003b9673313be6c9621 (refs/remotes/trunk)
    First, rewinding head to replay your work on top of it...
    Applying: Changed some paths around so python fronend works.
    Applying: Removed test_with_xsltproc.sh. This file no longer needed, as we now generate a bash backend module.
    jacob@jacob-laptop:~/workspace/gsoc2010/scxml-js$ git svn dcommit
    Committing to https://jbeard@svn.apache.org/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk ...
            M       src/python/scxml/cgf/backends/js
            M       src/python/scxml/cgf/xslt
    Committed r1037493
    W: 8563b885bfca77ccb33a87f56f78e6323af022a9 and refs/remotes/trunk differ, using rebase:
    :040000 040000 c33b3d66ecc6735af3241d7f9cee383d2736f614 59251941b33bda1376881b33bb2263ea87b1b947 M      src
    Current branch master is up to date.
    # of revisions changed
    before:
     574e2e495fa12cf3d81004638a06e3315d0abba5
    
    after:
     8563b885bfca77ccb33a87f56f78e6323af022a9
    574e2e495fa12cf3d81004638a06e3315d0abba5
     If you are attempting to commit  merges, try running:
             git rebase --interactive --preserve-merges  refs/remotes/trunk
    Before dcommitting
    

    git svn dcommit 后面跟着 git svn rebase

    是什么导致了dcommit的这个问题,以至于即使使用干净的签出也无法解决这个问题?

    1 回复  |  直到 14 年前
        1
  •  5
  •   Ben Jackson    14 年前

    我刚刚遇到了这个问题,最终弄清楚了发生了什么:当您通过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>
    

    就我自己的一个承诺。因此,在脚本看到部分同步的情况下,可能仍然存在竞争条件。这很烦人,但不是致命的。