Git拡張:Win32エラー487:cygwinのヒープ用のスペースを予約できませんでした、Win32エラー0


342

Git拡張機能:すべてが昨日まで正常に機能していました

しかし、いくつかのリポジトリを使用してプルしようとすると、突然このエラーが発生します 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は正常に動作しています。私は何が起こっているのか全くわかりません。なぜこれが起こっているのかについて何か考えはありますか?


5
Cygwinは奇妙で、永続的な共有メモリセクションを使用します。システムを再起動してみましたか?
グレッグ・ヒューギル2013

@GregHewgill:数日以来再起動していません。すぐにやります。
ウチアイタチ2013

1
@GregHewgill:うまくいった。ありがとう、多分あなたが答えとしてそれを投稿すれば、それは他の人にも役立つでしょう。
ウチアイタチ2013

このバグはgitに固有のものではなく、悪い日にcygwinは明らかな理由なしに同じように実行可能ファイルでクラッシュします。
meneldal 2015年

1
OP、選択した回答を@Yirkhaの回答に変更する必要があります。これにより、問題の根本的な原因が解決されます。それは将来の読者に対する無駄な試みを節約するかもしれません(私に起こったように)。
ysap 2017

回答:


230

Cygwinは永続的な共有メモリセクションを使用しますが、これは破損することがあります。この症状は、一部のCygwinプログラムが失敗し始めますが、他のアプリケーションは影響を受けないことです。これらの共有メモリセクションは永続的であるため、多くの場合、問題を解決する前にシステムを再起動してセクションをクリアする必要があります。


それがだれにも役立つ場合は、PATHのGitExtensionsビットを最初のアイテムに移動しましたが、問題は解決したようです。(私はgit / cmd自体を2番目に置きました-それがそれの一部であったかどうかはわかりません)。再起動や.dllシャッフルよりも少し簡単です。
jinglesthula 16

6
メモリを解放するために終了できる実行可能ファイルはありませんか?システム全体の再起動はやり過ぎのようです。また、以下の回答(stackoverflow.com/a/31970708/88409)は問題が実際に何であるかを説明し、破損したメモリとは何の関係もありません。
Triynko 2017

379

私も同じ問題を抱えていました。私はここで解決策を見つけました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で失敗しました

次の手順を順番に実行する必要があります。

  1. dllを別のディレクトリにコピーする
  2. 上記のコマンドを使用してコピーをリベースします
  3. 元のdllをコピーで置き換えます。

問題が発生した場合は、管理者としてコマンドを実行します


1
私の場合、rebase.exeは/ mingwの下のサブディレクトリにあったので、コマンドは次のようになりました:c:/ msysgit / mingw / bin / rebase -b 0x50000000 msys-1.0.dllそして、cにあるときに実行しました: / msysgit / binディレクトリ。
ロバートオシュラー

8
私はReBaseImage(MSYS-1.0.dllが)最後のエラー= 6で失敗しましたこのエラーをgitの
TheJKFever

17
@TheJKFever msys-1.0.dllを変更するため、管理者としてコマンドプロンプトで実行する必要があります。最初にdllのバックアップを作成し、それをmsys-1.0.dll.bakにコピーしてから、管理者としてコマンドを実行します。それは私のために働いた。
Nikolaos Georgiou 2014

1
Windows 8.1は、リベースしようとすると、このPCでこの実行可能ファイルを実行できないと通知します
Jules GM

2
Win10 64ビットプロにはrebase.exeがありませんが、次のように呼び出すと(VS2010)、「C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64 \ editbin.exe "/ REBASE:BASE = 0x50000000 msys-1.0.dll
PaulBußmann

136

tl; dr:64ビットGit for Windows 2をインストールします。


技術的な詳細

      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の大きなメモリチャンクを割り当てることができません。関連するコードはmsysgit sourceで見ることができます。


なぜアドレス空間のその部分が解放されないのですか?

多くの理由が考えられます。私の場合、競合するアドレスでロードされた他のいくつかのモジュールでした:

プロセスエクスプローラーのプロセスモジュール

最後のアドレスは約0x68570000 + 5 MB = 0x68C50000ですが、これらのWOW64関連DLLが0x68810000以上からロードされ、割り当てをブロックしています。

共有DLLがある場合は常に、Windowsは通常、すべてのプロセスで同じ仮想アドレスにそれをロードして、再配置処理を節約しようとします。これは、これらのシステムコンポーネントが何らかの形で競合したアドレスにロードされてしまったという不運の問題だ、この時間を


なぜあなたのGitにCygwinがあるのですか?

Gitは、いくつかの低レベルのコマンドと多くの便利なユーティリティで構成されるリッチスイートであり、ほとんどがUnixライクなシステムで開発されているためです。大規模な書き換えをせずにビルドして実行できるようにするには、少なくとも部分的にUnixに似た環境が必要です。

それを実現するために、人々はMinGWとMSYSを発明しました。これは、Unixのような方法でWindowsでプログラムを開発するための最小限のビルドツールセットです。MSYSには、共有ライブラリthisも含まれています。これはmsys-1.0.dll、実行時の2つのプラットフォーム間の互換性の問題の一部に役立ちます。そして、誰かが既に同じ問題を解決しなければならなかったので、その多くの部分はCygwinから取られました。

したがって、Cygwinではなく、ここで動作がおかしいのはMinGWのランタイムDLLです。

Cygwinでは、このコードはMSYS 1.0の内容以降、実際に大幅に変更されています。そのファイルの最後のコミットメッセージは、2001年からの「Import Cygwin 1.3.4」です。

どちらも現在のCygwinMSYSの新バージョン - MSYS2は-すでにうまくいけば、より堅牢である場所で異なるロジックを持っています。古い壊れたMSYSシステムを使用してビルドされたのは、Git for Windowsの古いバージョンのみです。


クリーンなソリューション:

  • Git for Windows 2をインストールします。これは、適切にメンテナンスされた新しいMSYS2で構築されており、多くの新機能、多くのバグ修正、セキュリティの改善なども備えています。可能であれば、64ビットバージョン使用することもお勧めします。ただし、リベースの回避策は32ビットシステムのバックグラウンドで自動的に実行されるため、問題が発生する可能性も低くなります。
  • コンピューターを再起動してアドレススペースをクリーンアップする(これらのモジュールを別のランダムアドレスでロードする)だけでうまくいくかもしれませんが、実際には、Git for Windows 2にアップグレードして、セキュリティ修正を入手するだけです。

ハッキーソリューション:

  • 異なるバージョンのGitまたは他のMSYSベースのアプリケーションにPATH異なるバージョンのが存在する可能性があるため、変更が機能することがありmsys-1.0.dllます。これは、異なるアドレス、このヒープの異なるサイズなどを使用している可能性があります。
  • msys-1.0.dll1)DLLであり、すでに再配置情報があり、2)「Windows OSのどのバージョンでも、(...)DLLが常に同じアドレス空間でロードされるという保証はない」ため、リベースは時間の浪費になる可能性があります。とにかく(ソース)。これが役立つ唯一の方法は、msys-1.0.dllそれ自体が競合するアドレスでロードされ、使用しようとすることです。これは、32ビットシステムでWindowsのGitが自動的に実行していることです
  • 上記の調査結果を考慮して、私は元々、msys-1.0.dllバイナリに別の値を使用するようにパッチを適用し_cygheap_start、問題をすぐに解決しました。

1
好奇心旺盛なコメントありがとうございます!それはかなり長い間何らかの方法で修正されており、適切な解決策はMSYS2上に構築されたGit for Windows 2を使用することです(したがってより最近のCygwinコード)。
Yirkha

2
よろしくお願いします。私はgit-extensionsにバンドルされているバージョンを使用しています。再起動して修正したので、更新が反映されるまで無視します。:-)
Tim Abell

3
完璧な、十分に文書化された答え!そして、現在受け入れられている答えの代わりに、問題に対する適切な永続的な解決策。
セーレンBoisen


1
x64 Git for windowsは私とcmderで動作しました。ありがとうございました!それは私を狂わせており、特にcmderで作業しています。基本的にx64 Gitフォルダーをcmder/vendor/git-for-windowsディレクトリにコピーし、古いフォルダーの名前をに変更しましたgit-for-windows-x86。を開くとcmder/vendor/git-for-windowsmingw3232ビットを使用している手掛かりとなるフォルダが表示されます。x64 Gitでは、フォルダーが表示されますmingw64
cmeza

32

リベースソリューションの非常に単純なバージョン:

次のように、gitがインストールされているフォルダーに移動します。

C:\Program Files (x86)\Git\bin

フォルダーをShiftキーを押しながら右クリックすると、そこから管理者としてコマンドプロンプトを開くことができます(コメントについてhttps://stackoverflow.com/users/35538​​9/darren-lewisに感謝します)。

次に実行します:

rebase.exe -b 0x50000000 msys-1.0.dll

これにより、再起動のアプローチが機能しなかったときの問題が修正されました。

それが役に立てば幸い。


1
私のために働いた。管理者としてコマンドプロンプトを実行していることを確認してください。
Darren Lewis

これは私にとってもうまくいきました、メモとして、右クリックをシフトしてcmd.exeを管理者としてロードする方法がわかりません。次に、コマンドを実行します。動いた!
エデンコルビン2017年

13

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\をmy %PATH%で最初にすることで、エラーメッセージが消えました。

再起動したり、DOSセッションを変更したりする必要はありません。
いったん%PATH%そのDOSセッションで更新され、gitがちょうど仕事を命じます。


carmbresterSixto Saezの両方が、問題を修正するために再起動する必要があることを(コメントで)以下に報告していることに注意してください。
注:まず、のmsys-1.0.dllようなも削除します%LOCALAPPDATA%


1
私のパスのどこにもmsys-1.0.dllがありませんでしたが、あなたはそこの何かに正しかったようです-私のパスのgitの部分をリストの上位に移動すると問題が解決しました。有難うございます!-修正のための再起動にうんざりしています。
carmbrester 14年

1
私の "追加の" msys-1.0.DLLファイル。C:\ Users \に別のアプリからのログイン \ AppData \ Localがあります。そのアプリ削除して再起動すると問題が解決しました
Sixto Saez '25

@SixtoSaez興味深い。回答を編集して、再起動の手順をわかりやすくしました。
VonC、2014

おそらく、再起動も必要な人はそれだけが必要だったでしょう(間違ったDLLの読み込みとは別の問題)
George Birbilis '29

7

(Greg Hegwillの回答で示唆されているように)再起動しても問題が解決しない場合は、msys-1.0.dll(および場合によっては他の関連DLL)の競合するインストールについてPATHを確認してください。

私の特定の状況では、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インストールを削除したりすることが含まれる可能性があります。)


再起動しても問題は解決しませんでした!パスに重複したエントリが実際にいくつかありました。Tksたくさん。
レジナルドサントス

2

ここで私の経験を共有したいだけです。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

リベースは成功したように見えましたが、エラーは残りました。次に、rebaseCygwin64ターミナル内でコマンドを実行し、エラーが発生しました。

$ rebase -b 0x50000000 msys-1.0.dll
rebase: Invalid Baseaddress 0x50000000, must be > 0x200000000

後でいくつかのアドレスを試しましたが、どちらも機能しませんでした。だから私はmsys-1.0.dllファイルを変更してしまい、問題は解決しました。


1

今日これに遭遇しました。Greg Hewgillの回答に導かれ、システムで実行中のプロセスを調べて、何かが「スタック」していないかどうか、または他のユーザーがgitを使用してマシンにログインしていないかどうかを確認しました。次に、この特定のマシンでcygwin(個別にインストール)を起動しました。起動しました。私はそれを閉じてから、Git拡張機能をもう一度試しました(プル操作を試していました)が機能しました。cygwinの起動が共有されたものをクリアしたかどうかはわかりませんが、このエラーに遭遇したのは今回が初めてで、これで問題が解決したようです。


1

Windows 8.0がクラッシュして更新された後、msys git 1.9で同じ問題が発生しました。パスにmsys / gitが見つからなかったので、Windowsのローカルユーザー環境設定に追加しました。再起動せずに動作しました。

基本的に、RobertBに似ていますが、私は持っていませんでした私のパスにgitの/ MSYSを。

ところで:

  1. rebase -b blablabla msys.dllを使用しようとしましたが、「ReBaseImage(msys-1.0.dll)failed with last error = 6」というエラーが発生しました

  2. これがすぐに必要で、デバッグに時間がない場合、Gitディレクトリの「Git Bash.vbs」がbashシェルを正常に起動することに気付きました。


私にとっても同じ状況です。管理者としてリベースに失敗しました。c:\Program Files (x86)\Git\binパスに追加され、今は黄金です。
Jon Crowell 2015年


0

LPCEXpressoのビルドでこの問題が発生しました。PATHにC:\ MinGW \ binがある場合。どういうわけか私はこの問題を取り除くためにそれを削除する必要がありました




0

%USERPROFILE%\ AppData \ Local \ SourceTree \ app-xxxの古いバージョンを削除するとうまくいきました。コマンドラインgitにどのように接続されたのかわかりません...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.