git svn - cygwin下的错误

gor*_*gor 19 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

我该如何解决?谢谢.

PS 我的系统是Windows 7 64位.

更新

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

Von*_*onC 20

你尝试rebaseall喜欢这里所描述

当您使用Cygwin时,有时会出现这样的错误

unable to remap some.dll to same address as parent someapp 4292 fork:
child 3964 - died waiting for dll loading, errno 11"
Run Code Online (Sandbox Code Playgroud)

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


OP gor报告他必须重新启动以完成rebaseall工作.
Dan Molding在评论中提到:

我只想补充说,关闭所有Cygwin窗口可能还不够.
您应该确保所有Cygwin的进程和服务都将终止和/或停止(ps -aash应显示什么,但ashps)重订基期之前.


rsenna 在评论中报道:

有关为何需要此解释,请参阅fatal error - unable to remap to same address as parent:Cygwin,Ruby on Rails,系统调用

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

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

ASLR非常适合恶意软件或黑客防御.黑客无法.dll在不崩溃系统的情况下不断为您的地址尝试新地址.


Joe*_*oel 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 [main ] perl 4680 fork:child 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> ash/usr/bin/rebaseall -b 0x60000000

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