簡體   English   中英

git svn - cygwin下的錯誤

[英]git svn - error under 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后重新啟動。

你嘗試過像這里描述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窗口,執行<cygwin_home>\\bin\\ash.exe 它將打開一個新的控制台窗口。 rebaseall那里執行rebaseall
一旦完成,您可以再次運行Cygwin而不會出現任何問題:-)


OP gor報告他必須重新啟動以進行rebaseall工作。
Dan Molding在評論中提到:

我只想補充說,關閉所有Cygwin窗口可能還不夠。
您應該確保所有Cygwin進程和服務都已終止和/或停止ps -aash顯示ashps ), 然后再進行rebase


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嘗試新地址而不會破壞你的系統。

我遇到了這個問題,但運行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:child 1136 - 錯過等待dll加載,錯誤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工作了。

面對類似的問題,直到我跑了1. rebaseall 2. perlrebase 3. peflagsall它沒有發揮作用

運行它們來解決問題

以上答案並沒有為我們的團隊在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上正確修復它的方法。

最初的,但不是確定的結果表明,此解決方案比此處記錄的其他建議更好。 我將在一周左右的時間內更新這篇文章,以表明此配方是否足以獲得永久可靠的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM