[英]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后重新啟動。
當您使用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 -a
從ash
顯示ash
和ps
), 然后再進行rebase 。
有關為何需要此解釋,請參閱
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.