【问题标题】:git svn clone malformed index info errorgit svn clone 格式错误的索引信息错误
【发布时间】:2015-12-04 14:24:35
【问题描述】:

当我运行 git svn clone 我得到以下错误:

  0 [main] perl 24432 cygwin_exception::open_stackdumpfile: Dumping stack trace to perl.exe.stackdump
  fatal: malformed index info 100644 362f1c18ceed5d593eb021432545685283a93 

当我打开文件时,我看到以下内容:

异常: RIP=0048360C537 处的 STATUS_ACCESS_VIOLATION rax=00000006039F81E0 rbx=000000005219E248 rcx=000000060003A3C0 rdx=0000000000000000 rsi=000000000000FDB4 rdi=0000000000000004 r8 =0000000000000000 r9 =0000000000000000 r10=0000000000230000 r11=000000048D785FBA r12=0000000000000003 r13=000006FFFF7FEDB8 r14=00000006014D4030 r15=000006FFFF7FEDD0 rbp=000000000007EDA8 rsp=000000000022BE80 程序=C:\Program Files\Git\usr\bin\perl.exe,pid 24432,线程主 cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B

我检查了以下链接:

Error with Git SVN clone

Problem cloning a single SVN Branch via git svn

Python SVN bindings for Windows

subversion python bindings documentation?

不幸的是,我对底层技术还不够熟悉,无法准确地弄清楚我应该做什么。可能会导致这种情况,我该如何解决?

【问题讨论】:

  • 我投票决定将此问题作为离题结束,因为 SO 不是讨论软件的特定众所周知的错误的地方。他们应该将其报告给 bugzilla 或邮寄到应该的地方
  • 对我来说,在将大型项目从 SVN 迁移到 Git(在 Windows 上)期间解决这个问题和其他问题的最有效方法是执行实际的 git svn clone ... 事情 not i> 在 Windows 上,但在 Linux 上。我快速设置了一台 Ubuntu 20 VMware 机器,整个迁移过程成功运行,没有出现 任何 错误(我之前在 Windows 上遇到过很多错误)。

标签: git perl svn


【解决方案1】:

对我来说,代理设置修复了它。也可以看看: https://github.com/git-for-windows/git/issues/274#issuecomment-473826553

C:\Users\USERNAME\.subversion\servers集合内

[global]
http-proxy-host = [insert IP here]
http-proxy-port = [insert port here]

【讨论】:

    【解决方案2】:

    如果 SVN repo 必须通过 http/https 代理访问需要在文件中配置代理

    c:\Users\...\.subversion\servers.

    在 [global] 部分设置 http-proxy-host 和 http-proxy-port。

    解决方案

    https://github.com/git-for-windows/git/issues/274#issuecomment-473826553

    【讨论】:

      【解决方案3】:

      在 C:\Program Files\Git\usr\bin 中执行 rebase.exe 为我解决了这个问题。我在这里找到了解决方案https://github.com/msysgit/msysgit/issues/25

      【讨论】:

        【解决方案4】:

        在我的情况下,这个错误发生在 Ubuntu 16.04 并且版本是 git-svn 版本 2.17.0 (svn 1.9.3) 在我运行 git svn --version 命令后,我切换到我的 MacOS哪个版本信息是 git-svn version 2.17.0 (svn 1.7.20) 在我运行git svn --version 命令后,然后在MacOS 中成功clone & fetch 和其他操作后切换回ubuntu。 p>

        【讨论】:

          【解决方案5】:

          我每次都可以重现这个问题,而且git svn完美运行

          版本 1.9.5

          您可以从

          的 Git-1.9.5-preview20141217.exe 安装它

          https://github.com/msysgit/msysgit/releases/tag/Git-1.9.5-preview20141217

          我想知道是否有人可以检查旧版本 1.9.5 和当前版本之间的区别(在你从 msysgit 移动到这里之后)

          用旧版本的git很痛苦,因为新版本的git svn不能正常工作。

          【讨论】:

            【解决方案6】:

            更新:在使用 2.11.0 和 git-svn 1:2.11.0-2ubuntu0.2 更新到 Ubuntu 17.04 后,克隆工作完美无缺。

            在通过 perl 脚本进行调试时,我发现了一个有趣的解决方案:

            • 通过在 perl 调试器中运行 git svn 来减慢或以某种方式操纵执行。

            使用以下命令启动git svn fetch(您可能需要更改路径。这也适用于克隆)。确保在您的 git 存储库/目录中运行命令:

            perl -d /usr/lib/git-core/git-svn fetch
            

            在调试器中输入以下内容并按ENTER

            b /usr/share/perl5/Git/SVN/Fetcher.pm:368 $base==undef or $dup==undef
            

            这基本上在我得到信号 11 的位置添加了一个条件断点。这是代码行:

            [ SVN::TxDelta::apply($base, $dup, undef, $fb->{path}, $fb->{pool}) ];
            

            然后输入c继续执行并按ENTER

            有人可以解释为什么这会有所帮助吗?

            编辑:成功了:213000 个修订版和 1780 个分支克隆到 git 中!

            【讨论】:

            • 谢谢!这个解决方法对我有用!其他解决方法,例如升级 git/svn、编辑 .git/config、使用 64 位(操作系统或/和 git)或 linux,都没有帮助。但是我遇到了另一个问题(最大打开文件),但这个问题帮助了 stackoverflow.com/a/24796466/199225
            • 这作为一种解决方法很有帮助,但仍需要找到解决方案。
            • 天啊,是的,这对我也有用。多么奇怪。谢谢!
            【解决方案7】:

            这是我遇到的问题:

            • 操作系统:xubuntu 16.04
            • git-svn 版本 2.7.4 (svn 1.9.3)

            来自perl -d /usr/lib/git-core/git-svn fetch的跟踪信息:

            Signal SEGV at /usr/local/share/perl/5.22.1/Git/SVN/Fetcher.pm line 368
                Git::SVN::Fetcher::apply_textdelta(Git::SVN::Fetcher=HASH(0x20ee160), HASH(0x2488a40), undef, _p_apr_pool_t=SCALAR(0x2488bf0)) called at /usr/lib/x86_64-linux-gnu/perl5/5.22/SVN/Ra.pm line 623
                SVN::Ra::Reporter::AUTOLOAD(SVN::Ra::Reporter=ARRAY(0x8d0fa0), SVN::Pool=REF(0x20ee910)) called at /usr/local/share/perl/5.22.1/Git/SVN/Ra.pm line 308
                Git::SVN::Ra::gs_do_update(Git::SVN::Ra=HASH(0x20df170), 42560, 42560, Git::SVN=HASH(0x20dea08), Git::SVN::Fetcher=HASH(0x20ee160)) called at /usr/local/share/perl/5.22.1/Git/SVN.pm line 1205
                Git::SVN::do_fetch(Git::SVN=HASH(0x20dea08), HASH(0x20ee1d8), 42560) called at /usr/local/share/perl/5.22.1/Git/SVN/Ra.pm line 471
                Git::SVN::Ra::gs_fetch_loop_common(Git::SVN::Ra=HASH(0x20df170), 42500, 95400, ARRAY(0x1637c08), ARRAY(0x1637c20)) called at /usr/local/share/perl/5.22.1/Git/SVN.pm line 179
                Git::SVN::fetch_all("svn", HASH(0x20dee28)) called at /usr/lib/git-core/git-svn line 570
                main::cmd_fetch() called at /usr/lib/git-core/git-svn line 386
                eval {...} called at /usr/lib/git-core/git-svn line 384
            Aborted (core dumped)
            

            我终于通过以下步骤解决了这个问题(这是针对 Ubuntu Linux 16.04 用户):

            sudo apt build-dep subversion
            sudo apt install libneon27-dev
            sudo cpan SVN::Core
            

            然后我可以使用git svn fetch/clone 而不会崩溃。

            这个问题的根本原因是 Perl SVN::Core 库脚本与 Perl 中安装的二进制文件不匹配(在 Perl 中安装了单独的 subversion 二进制文件,除了系统安装的二进制文件)。

            请注意,这会将您的 git-svn 的 svn 版本降级到 1.8.11(在 1.9.3 之前),并可能导致其他问题。

            【讨论】:

              【解决方案8】:

              我在使用 git-svn 时遇到了各种错误,其中 perl 脚本会在不同的地方死掉,获取会中断,或者服务器会断开连接。这是一个巨大的 repo,当通过 svn 签出时需要几十 GB。

              为我解决这个问题的方法是简单地使用 SmartGit 而不是 git-svn。它需要 Java 8,运行速度极快,并且没有报告任何错误,在几个小时内无缝完成了需要 svn 几天的任务。

              【讨论】:

              • 听起来是个好主意......但是糟糕,它只能免费用于非商业用途;-(
              【解决方案9】:

              就我而言,我没有连接到我们的 svn 连接所需的 VPN。这是我的错误:

              Exception: STATUS_ACCESS_VIOLATION at rip=00000000000
              rax=0000000000000000 rbx=00000006010BBDA8 rcx=00000006010BBDA8
              rdx=00000006010C40E8 rsi=0000000000000011 rdi=0000000000000000
              r8 =0000000000000000 r9 =00000006010EBCA8 r10=0000000100000000
              r11=000000049F2423C9 r12=00000000FFFFC190 r13=00000000FFFFC198
              r14=00000006010B2DF8 r15=00000006010B2D68
              rbp=00000000FFFFC1A8 rsp=00000000FFFFC138
              program=C:\Program Files\Git\usr\bin\perl.exe, pid 7884, thread main
              cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B
              Stack trace:
              Frame        Function    Args
              End of stack trace
              

              【讨论】:

                【解决方案10】:

                对我来说,唯一可行的解​​决方案是使用旧版本的 Git。 我使用了 Git 1.8.3 的便携包,可以在这里下载:

                https://github.com/msysgit/msysgit/releases/tag/Git-1.8.3-preview20130601

                有了它,就不需要 .git/config 编辑、拆分签出或 perl 调试语句。

                【讨论】:

                  【解决方案11】:

                  检查是哪个 svn 提交导致了问题。

                  提交由git svn clone 命令输出,前面有一个r。输出的最后一个提交是有问题的。

                  下一个示例显示当开始处理 Subversion 修订版 15 作为 Git 提交 373fb1...git svn clone 命令输出的内容:

                  r15 = 373fb1de430a6b1e89585425f276aae0058c3deb (refs/remotes/svn/trunk)
                  

                  使用-r(修订版)选项拆分git svn clone 命令

                  使用这个方法:

                  git svn clone -r 0:<problematic_revision - 1> <repo URL>
                  git svn clone -r <problematic_revision - 1>:problematic_revision <repo URL>
                  git svn clone -r <problematic_revision>:HEAD <repo URL>
                  

                  假设修订版15 是有问题的版本,而/tmp/svn/repo/ 中的repo,解决方案将是:

                  git svn clone -r  0:14   file:///tmp/svn/repo/
                  git svn clone -r 14:15   file:///tmp/svn/repo/
                  git svn clone -r 15:HEAD file:///tmp/svn/repo/
                  

                  【讨论】:

                  • 就我而言,有问题的修订版是数字 1。但是使用您的公式并不能直接起作用。对我有用的是 splitint 0:2 然后是 2:HEAD。无论如何,解决方案都在使用您的方法。
                  【解决方案12】:

                  我在使用 svn2git 工具将巨大的 svn 存储库迁移到 git 时遇到此错误。我在 .git/config 文件中添加了以下行,它开始工作:

                  [core]
                      repositoryformatversion = 0
                      filemode = false
                      bare = false
                      logallrefupdates = true
                      symlinks = false
                      ignorecase = true
                      hideDotFiles = dotGitOnly
                      packedGitLimit = 256m
                      packedGitWindowSize = 256m
                      longpaths = true
                  [http]
                      postBuffer = 524288000
                  [pack]
                    deltaCacheSize = 256m
                    packSizeLimit = 256m
                    windowMemory = 1024m
                  

                  git-config man page 解释了这些设置。

                  【讨论】:

                  • 它也为我解决了这个问题。我必须更改的唯一两个设置是 core.packedGitLimitcore.packedGitWindowSize
                  • longpaths = true 正在帮助我!谢谢!
                  • 对我来说,是 postBuffer = 134217728 有帮助(提高到这个值已经有帮助,让它更大,就像上面的例子一样,也会有帮助)。
                  • 我假设 symlinks=falsefilemode=falseignorecase=true 仅适用于 Windows?
                  【解决方案13】:

                  我能够使用Cygwin 正确检查 svn 存储库。

                  【讨论】:

                    【解决方案14】:

                    更新 - 在我的 git gc 之后问题仍然存在。我尝试了每个版本的 git windows(32 位和 64 位),但仍然出现此错误。然后我切换到在 linux 上使用 git,它对我来说很好,即使是非常大的提交。我建议切换到 linux,否则你会很不走运,因为这里提出的问题 - https://github.com/git-for-windows/git/issues/274 已经快 6 个月了。

                    更新 - 添加到 centic 的答案,git gc 仅适用于 Windows 的 32 位 git,针对此特定问题。

                    我认为 Windows 的 64 位 git 存在问题。我在 64 位 git 上遇到了同样的问题,但是在切换到 git 2.7.2 windows 32 位后,问题似乎已经解决了。

                    【讨论】:

                    • 我从 64 位切换到 32 位。我解决了它!谢谢。
                    【解决方案15】:

                    在我的情况下,这个错误发生在大存储库中。因此,如果可能,请尝试克隆子文件夹。

                    【讨论】:

                      【解决方案16】:

                      我有类似的异常和错误消息,对我来说

                      git gc
                      

                      和/或一个

                      git svn gc
                      

                      使存储库恢复可用状态。另见https://stackoverflow.com/a/1436386/411846

                      【讨论】:

                      • 鉴于 'git svn clone' 正在创建一个存储库,你在哪里运行这些命令?
                      • 我刚看到同样的错误信息,可能是之前做了“git svn clone”之后,老实说,我现在不记得详细了。
                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2013-11-12
                      • 2015-09-09
                      • 2012-01-07
                      • 1970-01-01
                      • 2016-04-05
                      • 2011-03-19
                      相关资源
                      最近更新 更多