Git Extensions: 昨日まですべてがうまくいっていた。
git extensions
を使ってリポジトリを引っ張ろうとすると突然このエラーが出ます
C:\Program Files\Git\bin\git.exe pull --progress "Origin"
Done
0 [main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487
AllocationBase 0x0, BaseAddress 0x68560000, RegionSize 0x390000, State 0x10000
C:\Program Files\Git\bin\sh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0
それは私がクローンしたすべてのリポジトリに起こっています。しかし、私の git bash は正常に動作しています。何が起こっているのかわかりません。なぜこれが起こっているのかについて何か考えはありますか?
Cygwinは機会に破損することができます永続的な共有メモリセクションを、使用しています。この症状は、いくつかのCygwinのプログラムが失敗し始めるということですが、他のアプリケーションは影響を受けません。これらの共有メモリセクションは永続的なので、問題を解決する前に システムの再起動 を実行してそれらを消去する必要があります。
私は同じ問題を抱えていました。私はここで解決策を見つけました http://jakob.engbloms.se/archives/1403
c:\msysgit\bin>rebase.exe -b 0x50000000 msys-1.0.dll
私にとって解決策は少し異なっていました。そうだった
C:\Program Files (x86)\Git\bin>rebase.exe -b 0x50000000 msys-1.0.dll
あなたがDLLをリベースする前に、あなたはそれが使用されていないことを確認する必要があります:
tasklist /m msys-1.0.dll
そして バックアップを取ってください:
copy msys-1.0.dll msys-1.0.dll.bak
Rebaseコマンドが失敗した場合は、次のようになります。
ReBaseImage(msys-1.0.dll)は、最後のエラー= 6で失敗しました
順番に次の手順を実行する必要があります。
問題がある場合は、 Administrator のようにコマンドを実行してください。
0 [main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487
AllocationBase 0x0, BaseAddress 0x68570000, RegionSize 0x2A0000, State 0x10000
PortableGit\bin\bash.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0
この症状自体は、実行可能ファイルのイメージベース、Cygwinの共有メモリセクションの破損、DLLの競合バージョンなどとは関係ありません。
Cygwinコードは、この固定アドレス0x68570000にヒープ用に最大5 MBのメモリーのチャンクを割り当てることができませんでしたが、明らかにそこには最大2.5 MBのサイズのホールしかありませんでした。関連するコードは msysgit source )にあります。
さまざまな理由が考えられます。私の場合は、競合するアドレスに他のモジュールがロードされていました。
最後のアドレスはおよそ0x68570000 + 5 MB = 0x68C50000ですが、これらのWOW64関連のDLLは0x68810000からロードされているため、割り当てがブロックされています。
いくつかの共有DLLがあるときはいつでも、Windowsは一般にいくつかの再配置処理を節約するためにすべてのプロセスの同じ仮想アドレスでそれをロードしようとします。これらのシステムコンポーネントが矛盾したアドレス今回にロードされたのは、運が悪いことだけです。
なぜなら、Gitはいくつかの低レベルのコマンドと多くの有用なユーティリティからなる豊富なスイートで、ほとんどがUnixライクなシステム上で開発されているからです。大量の書き換えをせずにビルドして実行できるようにするには、少なくとも部分的にUnixライクな環境が必要です。
それを達成するために、人々はMinGWとMSYSを開発しました - それはUnixのような方法でWindows上でプログラムを開発するための最小の構築ツールのセットです。 MSYSには、このmsys-1.0.dll
という共有ライブラリも含まれています。これは、実行時の2つのプラットフォーム間の互換性の問題を解決するのに役立ちます。そしてそれの多くの部分はCygwinから取られました、なぜなら誰かがすでに同じ問題をそこで解決しなければならなかったからです。
だからCygwinじゃない、MinGWのランタイムDLLが奇妙な振る舞いをするのはここだ。
Cygwinでは、このコードは実際にはMSYS 1.0から何度も大きく変更されました。これは、 そのファイル と言うのは2001年からの "Import Cygwin 1.3.4"です。
現在のCygwin と 新しいバージョンのMSYS - MSYS2 - はすでに別のロジックを持っていますが、これはより堅牢です。古いバージョンのGit for Windowsのみを使用してビルドされたものです。 MSYSシステム.
msys-1.0.dll
がある可能性があるため、PATH
を変更してもうまくいくことがあります。msys-1.0.dll
をリベースすることは時間の無駄になるかもしれません、なぜなら1)はDLLであり、それはすでにリロケーション情報を持っていて、2) "Windows OSのどのバージョンでも(...)DLLが常にロードされる保証はないとにかく( source )。これが役立つ唯一の方法は、msys-1.0.dll
自体が競合アドレスでロードされている場合に使用することです。これは、Git for Windowsの場合と同様です。みんな 32ビットシステム で自動的にやっています。msys-1.0.dll
バイナリに_cygheap_start
の別の値を使用するようにバイナリパッチを適用し、それが問題をすぐに解決しました。リベースソリューションの非常に簡単な検証:
以下のように、gitがインストールされているフォルダに移動します。
C:\Program Files (x86)\Git\bin
Shiftキーを押しながらフォルダを右クリックすると、そこから管理者としてプロンプトコマンドを開くことができるはずです(そのおかげで https://stackoverflow.com/users/355389/darren-lewis に感謝)
次に実行します。
rebase.exe -b 0x50000000 msys-1.0.dll
再起動のアプローチがうまくいかなかったとき、これは私のためにそれを修正しました。
それが役に立てば幸い。
Git1.8.5.2にアップグレードした後も同じエラーメッセージが表示されます。
msys-1.0.dll
ドライブ上のすべてのC:\
を検索して、Gitが使用するものを最初にしてください。
たとえば、私の場合は、単に次の順序を変更しました。
C:\prgs\Gow\Gow-0.7.0\bin\msys-1.0.dll
C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\msys-1.0.dll
GitのパスC:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\
を私の%PATH%
の先頭にすることで、エラーメッセージは消えました。
再起動したり、DOSセッションを変更したりする必要はありません。
そのDOSセッションで%PATH%
が更新されると、gitコマンドは動作します。
carmbrester と Sixto Saez の両方が、問題を解決するために reboot をしなければならないことを以下に報告します(コメント内)。
注:まず、msys-1.0.dll
内のもののように、すべての%LOCALAPPDATA%
も削除します。
再起動しても問題が解決しない場合(Greg Hegwillの回答で示唆されているように)、PATHでmsys-1.0.dll(およびおそらく他の関連DLL)の競合するインストールを確認してください。
私の特定の状況では、MinGWのmsysのインストールでは、そのDLLのコピーがそのbin
ディレクトリ(<MinGW_Install_Path>\msys\1.0\bin
)にあり、それがPATHにリストされていました。 Gitのcmd
ディレクトリはPATHにリストされていましたが、そのbin
はリストされていませんでした。 (Gitのバージョンのmsys-1.0.dllはbin
ディレクトリにあります。明らかにMSys-Gitのデフォルトインストールはそのbin
をPATHに追加しません。)
一時的な修正は、Gitのbin
ディレクトリをPATHに追加して、MinGWのパスの前に表示されるようにすることでした。 (もっと恒久的な修正には、おそらくMinGWのmsysとGitの間のパスの衝突を整理したり、重複したmsysインストールを削除することが含まれるでしょう。)
ここで私の経験を共有したいと思います。 Windows 64ビットマシンでMTKプラットフォーム用にクロスコンパイルしているときに同じ問題に遭遇しました。 MinGWとMSYSが構築プロセスに関与しており、この問題が浮上しました。 msys-1.0.dll
ファイルを変更して解決しました。 rebase.exe
もシステムの再起動も私にとってはうまくいきませんでした。
私のコンピュータにはrebase.exeはインストールされていません。私はcygwin64をインストールし、内側にrebase.exe
を使いました。
C:\cygwin64\bin\rebase.exe -b 0x50000000 msys-1.0.dll
リベースは成功したように見えましたが、エラーは残りました。それから私はCygwin64ターミナルの中でrebase
コマンドを実行し、そしてエラーを得ました:
$ rebase -b 0x50000000 msys-1.0.dll
rebase: Invalid Baseaddress 0x50000000, must be > 0x200000000
私は後でカップルの住所を試してみましたが、どちらもうまくいきませんでした。それで私はmsys-1.0.dll
ファイルを変更することになった、そしてそれは問題を解決した。
私は今日これに遭遇した。 Greg Hewgillの答えに導かれて、私は自分のシステムで実行中のプロセスを調べて、何かが「動かなくなった」かどうか、または他のユーザーがgitを使ってマシンにログインしているかどうか調べました。それから私はこの特定のマシン上でcygwin(別々にインストールされた)を立ち上げました。それはうまく起動しました。私はそれを閉じてからGit Extensionsをもう一度試してみました(私はpull操作を試みていました)そしてそれはうまくいきました。 cygwinの起動によって共有されたものがクリアされたかどうかはわかりませんが、これが私がこのエラーに遭遇したのは初めてのことで、これは私のために修正したようです。
このエラーは私のWindowsマシンではめったに起こりません。私はマシンを再起動することになった、そしてエラーは消えた。
私はいくつかのWindows 8.0のクラッシュとアップデートの後、msys git 1.9で同じ問題を抱えていた。自分のパスにmsys/gitが見つからなかったので、windows local-user envinroment設定に追加しました。再起動せずに動作しました。
基本的には、RobertBに似ていますが、 any git/msysは私のパスにありませんでした。
ところで:
Rebase -b blablabla msys.dllを使用しようとしましたが、 "ReBaseImage(msys-1.0.dll)に失敗しました"というエラーが発生しました= 6
あなたがこれをすぐに必要とし、デバッグ時間がないならば、私はGitディレクトリの "Git Bash.vbs"がbashシェルを正常に起動することに気づきました。
c:\ msysgit\bin> rebase.exe -b 0x50000000 msys-1.0.dll
%USERPROFILE%\ AppData\Local\SourceTree\app-x.x.xの古いバージョンを削除しても問題ありません。それがどのようにコマンドラインgitに接続されたかわからない...
私はあなたがPATHにC:\ MinGW\binがあるならLPCXpresso building.ifでこの問題に遭遇しました。他のMinGWもベースを好むので、どういうわけか私はこの問題を取り除くためにそれを削除しなければならなかった
この問題を解決するために、私はTortoise Gitにそのアップデートをインストールさせるだけです。