git svn - cygwin下的错误

发布于 2024-10-17 18:40:37 字数 703 浏览 1 评论 0原文

我有 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位。

更新

重新建立有帮助。但执行 rebase 后我必须重新启动。

I have cygwin and git. I'm trying to commit with git to svn - git svn dcommit. But it fails with strange error:

$ 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

How can I fix it ? Thanks.

P.S.
My system is windows 7 64 bit.

Update

reabase helped. but I had to reboot after executing rebase.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

大姐,你呐 2024-10-24 18:40:37

您是否尝试过 rebaseall 类似此处描述

当你使用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 窗口,执行 \bin\ash.exe。它将打开一个新的控制台窗口。
在那里执行rebaseall
完成后,您可以再次运行 Cygwin,不会出现任何问题:-)


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

我只是补充一点,关闭所有 Cygwin 窗口可能还不够。
您应该确保所有 Cygwin 进程和服务都已终止和/或停止(来自 ashps -a 应该只显示 ashps变基之前


rsenna 报告 在评论中

有关为何需要此操作的说明,请参阅 致命错误 - 无法重新映射到与父级相同的地址:Cygwin、Ruby on Rails、系统调用

那么到底发生了什么?
好吧,在本例中,问题是 Windows 管理其 .dll 的方式造成的。

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

ASLR 可以很好地防御恶意软件或黑客。黑客无法不断尝试 .dll 的新地址而不导致系统崩溃。

Did you try a rebaseall like described here?

When you are working with Cygwin, sometimes you will get an error like this

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

Then you would need to run rebaseall.
In order to run it, close all your Cygwin windows, Execute <cygwin_home>\bin\ash.exe. It will open a new console window.
Execute rebaseall there.
Once it has completed, you can go back to running Cygwin again without any issues :-)


The OP gor reports he had to reboot to make rebaseall work.
Dan Moulding mentions in the comments:

I'll just add that closing all Cygwin windows may not be sufficient.
You should make sure all Cygwin processes and services are terminated and/or stopped (ps -a from ash should show nothing but ash and ps) before rebasing.


rsenna reports in the comments:

For an explanation of why this is needed, see fatal error - unable to remap to same address as parent: Cygwin, Ruby on Rails, System calls

So what actually is happening?
Well, in this case, the problem was a result of the way Windows manages its .dll's.

Windows uses ASLR (address space layout randomization) to manage its .dll's. It loads your dll's into different areas of memory every time you boot your computer.
If this gets out of whack then the next time you look for that .dll - you can crash your system. Or if you look in the wrong place, you can crash your system.
So how can this system get out of whack? Well, running your cygwin setup program can affect record keeping, especially if the ASLR has changed but Cygwin is holding on to an older copy (this can happen when setup doesn't complete).

ASLR is a great defense against malware or hackers. Hackers can't constantly try new addresses for your .dll's without crashing your system.

落在眉间の轻吻 2024-10-24 18:40:37

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

这是我所看到的示例。请注意对地址 0x6FA00000 的引用

$ git svn dcommit 提交到
844 [主要] perl 1136 C:\cygwin\bin\perl.exe: * 致命
错误 - 无法重新映射
C:\cygwin\bin\cygdb-4.5.dll 相同
作为父地址:0x58B40000 !=
**0x6FA00000
堆栈跟踪:帧
函数参数 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 加载时死亡,
错误号11

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

我能够按照在 Chromium wiki 上找到的建议解决此问题:

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 |发球台富
$ 猫 foo | grep 6fa000

...

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

这与 Sophos Security 提供的 DLL 的加载地址相匹配,我的 IT 团队默认在我们的计算机上运行该 DLL并成为失败的原因。 rebaseall 没有机会解决该问题,因为 Sophos 提供的 DLL 不是 cygwin 的一部分。

Chromium wiki 说要选择一个小于导致问题的 DLL 的基地址,因此我选择了 0x60000000。您可能必须根据您可能看到的有问题的 DLL 选择不同的基地址。

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

c:\cygwin\bin>ash /usr/bin/rebaseall
-b 0x60000000

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

I was having this issue but running rebaseall wouldn't fix the problem. I was attempting to run git svn dcommit and seeing the remap errors mentioned no matter how many times I ran rebaseall and/or rebooted.

Here's a sample of what I saw. Note the reference to address 0x6FA00000

$ git svn dcommit Committing to
844 [main] perl 1136 C:\cygwin\bin\perl.exe: * fatal
error - unable to remap
C:\cygwin\bin\cygdb-4.5.dll to same
address as parent: 0x58B40000 !=
**0x6FA00000
Stack trace: Frame
Function Args 0082B458 6102792B
(0082B458, 00000000, 00000000,
00000000) 0082B748 6102792B
(6117DC60, 00008000, 00000000,
6117F977) 0082C778 61004F3B
(611A6FAC, 61247BCC, 58B40000,
6FA00000) End of stack trace
3 [main] perl 4680 fork: child 1136 - died waiting for dll loading,
errno 11

I don't think it's important but I'm running on Windows7 Enterprise 32 bit using my company's corporate image.

I was able to fix this following the advice I found on the Chromium wiki:

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

I used ListDlls.exe (http://technet.microsoft.com/en-us/sysinternals/bb896656.aspx) from cygwin to capture output of DLLs loaded in running processes and grep'ed for the address causing issues:

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

...

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

This matched load address of a DLL provided by Sophos Security which my IT group has running on our machines by default and was the cause of the failure. rebaseall didn't have a chance to fix the problem because the Sophos provided DLL isn't part of cygwin.

The Chromium wiki said to choose a base address less than the DLL causing the issue so I picked 0x60000000. You may have to pick a different base address depending on the offending DLL you might see.

I reran rebaseall from a cmd.exe prompt and no other cygwin processes running.

c:\cygwin\bin>ash /usr/bin/rebaseall
-b 0x60000000

After restarting my cygwin shell git svn dcommit worked.

℉絮湮 2024-10-24 18:40:37

面临类似的问题,直到我跑步才解决
1. 重新设定基准
2. perlrebase
3.peflagsall

运行它们来解决问题

Faced similar problems and it didnt go awway till i ran
1. rebaseall
2. perlrebase
3. peflagsall

run them all to fix the problem

别靠近我心 2024-10-24 18:40:37

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

乔恩,

这是一个已知问题。我已经离开Windows世界很长时间了,但是
我还有一些注释来“修复”这个问题:

<块引用>

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

$ 重新基准化

$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< /a>

帕斯卡还在后续中指出:

...最重要的部分是运行 peflagsall,这是方法
在 Win7 IIRC 上正确修复该问题。

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

The above answers didn't result in a reliable fix to the problem of running cygwin git on 64bit Windows (Windows 7) for our team. I posted a question on the git mailing this and got this response from Pascal Obry:

Jon,

This is a known issue. I have since a long time left Windows world but
I still have some notes to "fix" this:

From the ash shell (be sure that no Cygwin process are still running):

$ rebaseall

$ peflagsall

Try your command again. If it still doesn't work, try instead: $
rebaseall -b 0x50000000 -o 0x80000 or -b 0xNNNN0000 where NNNN is any
hex number between 2000 and 7000. The -o option tell to leave more
space between the dlls, it may also help. It did in my case.

If you are curious, look at /usr/share/doc/Cygwin/rebase-3.0.README
for more explanation.

See also: http://www.spinics.net/lists/git/msg183753.html

Pascal also noted in a followup that:

... the most important part is running peflagsall, this was the way to
fix that properly on Win7 IIRC.

Initial, but not definitive, results suggest this solution is working better than the other suggestions documented here. I will update this post in a week or so to indicate whether this recipe is sufficient to gain a permanent and reliable solution.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文