git svn - cygwin下的错误

时间:2011-02-16 09:16:22

标签: git cygwin

我有cygwin和git。我正试图用git提交给svn - git svn dcommit。但它失败了,出现了奇怪的错误:

$ git svn dcommit
      4 [main] perl 5536 C:\cygwin\bin\perl.exe: *** fatal error - unable to remap \\?\C:\cygwin\lib\perl5\5.10\i686-cygwin\auto\List\Util\Util.dll to same address as parent: 0xA20000 != 0xB40000
Stack trace:
Frame     Function  Args
0088B508  6102749B  (0088B508, 00000000, 00000000, 00000000)
0088B7F8  6102749B  (61177B80, 00008000, 00000000, 61179977)
0088C828  61004AFB  (611A136C, 6125AB3C, 00A20000, 00B40000)
End of stack trace

我该如何解决?感谢。

P.S。 我的系统是Windows 7 64位。

更新

reabase有所帮助。但是我必须在执行rebase后重新启动。

4 个答案:

答案 0 :(得分:19)

您是否尝试了rebaseall之类的 described here

  

当您使用Cygwin时,有时您会收到类似

的错误
unable to remap some.dll to same address as parent someapp 4292 fork:
child 3964 - died waiting for dll loading, errno 11"
  

然后你需要运行rebaseall   为了运行它,关闭所有Cygwin窗口,执行<cygwin_home>\bin\ash.exe,它将打开一个新的控制台窗口
  在那里执行rebaseall   一旦完成,您可以再次运行Cygwin而不会出现任何问题: - )


OP gor报告他必须重新启动以使rebaseall正常工作 Dan Moulding在评论中提及:

  

我要补充说,关闭所有Cygwin窗口可能还不够   您应该确保所有Cygwin流程和服务都已终止和/或停止(来自ps -a的{​​{1}}除了ashash之外什么都不会显示在变基之前


rsenna举报in the comments

  

有关为何需要此解释的说明,请参阅fatal error - unable to remap to same address as parent: Cygwin, Ruby on Rails, System calls

     

那究竟发生了什么?   那么,在这种情况下,问题是Windows管理ps的方式的结果。

     

Windows使用 .dll (地址空间布局随机化)来管理其ASLR。每次启动计算机时,它都会将您的dll加载到不同的内存区域   如果这出现问题,那么下次您查找.dll时 - 可能会导致系统崩溃。或者,如果您在错误的地方看,可能会导致系统崩溃   那么这个系统怎么能摆脱困境呢?好吧,运行你的cygwin安装程序会影响记录保存,特别是如果.dll已经改变但Cygwin正在保留旧版本(这可能在安装未完成时发生)。

     

ASLR非常适合恶意软件或黑客防御。 ASLR尝试新地址。

答案 1 :(得分:13)

我遇到了这个问题,但运行rebaseall无法解决问题。我试图运行git svn dcommit并看到我提到的重映射错误,无论我运行rebaseall和/或重启多少次。

这是我看到的样本。请注意地址 0x6FA00000

的引用
  

$ git svn dcommit致力于       844 [main] perl 1136 C:\ cygwin \ bin \ perl.exe: *致命   错误 - 无法重新映射   C:\ cygwin \ bin \ cygdb-4.5.dll改为相同   地址为父:0x58B40000!=   ** 0x6FA00000 堆栈跟踪:帧
  功能Args 0082B458 6102792B   (0082B458,00000000,00000000,   00000000)0082B748 6102792B   (6117DC60,00008000,00000000,   6117F977)0082C778 61004F3B   (611A6FAC,61247BCC,58B40000,   6FA00000)堆栈跟踪结束         3 [主要] perl 4680 fork:孩子1136 - 等待dll加载死亡,   errno 11

我认为这不重要,但我使用我公司的企业形象在Windows7 Enterprise 32位上运行。

我能够按照我在Chromium维基上找到的建议解决这个问题:

http://code.google.com/p/chromium/wiki/CygwinDllRemappingFailure

我使用来自cygwin的ListDlls.exe(http://technet.microsoft.com/en-us/sysinternals/bb896656.aspx)来捕获正在运行的进程中加载​​的DLL的输出,并为导致问题的地址进行grep'ed:

  

$ ./ListDlls.exe | tee foo
  $ cat foo | grep 6fa000

     

...

     

0x6fa00000 0x3c000 9.05.0005.9574 C:\ PROGRA~1 \ Sophos \ SOPHOS~1 \ SOPHOS~1.DLL

Sophos Security提供的DLL的匹配加载地址,默认情况下我的IT组在我们的计算机上运行,​​这是导致失败的原因。 rebaseall没有机会解决问题,因为Sophos提供的DLL不是cygwin的一部分。

Chromium维基说要选择一个小于导致问题的DLL的基地址,所以我选择 0x60000000 。您可能必须选择不同的基址,具体取决于您可能会看到的违规DLL。

我从cmd.exe提示符重新进行rebaseall,并且没有其他cygwin进程在运行。

  

c:\ cygwin \ bin&gt; ash / usr / bin / rebaseall   -b 0x60000000

重新启动我的cygwin shell后,git svn dcommit工作。

答案 2 :(得分:4)

面对类似的问题,直到我跑步它都没有发挥作用 rebaseall 2. perlrebase 3. peflagsall

运行它们以解决问题

答案 3 :(得分:1)

上述答案并没有为我们的团队在64位Windows(Windows 7)上运行cygwin git的问题提供可靠的解决方案。我在git邮件中发布了一个问题,得到了Pascal Obry的回复:

  

乔,

     

这是一个已知问题。我已经很久没有离开Windows世界了   我还有一些注意事项要“修复”这个:

     
    

从ash shell(确保没有Cygwin进程仍在运行):

  
     

$ rebaseall

     

$ peflagsall

     

再次尝试你的命令。如果仍然无效,请尝试:$   rebaseall -b 0x50000000 -o 0x80000或-b 0xNNNN0000其中NNNN是任意的   十六进制数介于2000和7000之间。-o选项告诉更多   在dll之间的空间,它也可能有所帮助。它确实在我的情况下。

     

如果您好奇,请查看/usr/share/doc/Cygwin/rebase-3.0.README   有关更多解释。

另请参阅:http://www.spinics.net/lists/git/msg183753.html

Pascal还在后续文章中指出:

  

......最重要的部分是运行peflagsall,这是通往的方式   在Win7 IIRC上正确修复。

最初但非确定的结果表明此解决方案比此处记录的其他建议更好。我将在一周左右的时间内更新这篇文章,以表明此配方是否足以获得永久可靠的解决方案。