Git-Erweiterungen: Bis gestern hat alles gut funktioniert.
Aber plötzlich erhalte ich diesen Fehler, wenn ich versuche, einige Repositorys mit zu ziehen 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
Es passiert für alle Repositories, die ich geklont habe. Aber mein Git Bash funktioniert gut. Ich habe keine Ahnung, was los ist. Irgendeine Idee, warum dies geschieht?
git
cygwin
git-extensions
Uchia Itachi
quelle
quelle
Antworten:
Cygwin verwendet dauerhafte Shared-Memory-Abschnitte, die gelegentlich beschädigt werden können. Das Symptom dafür ist, dass einige Cygwin-Programme anfangen zu scheitern, andere Anwendungen jedoch nicht betroffen sind. Da diese gemeinsam genutzten Speicherabschnitte dauerhaft sind, ist häufig ein Neustart des Systems erforderlich, um sie zu löschen, bevor das Problem behoben werden kann.
quelle
Ich hatte das gleiche Problem. Ich habe hier eine Lösung gefunden http://jakob.engbloms.se/archives/1403
Für mich war die Lösung etwas anders. Es war
Bevor Sie DLLs neu erstellen, sollten Sie sicherstellen, dass sie nicht verwendet werden:
Und machen Sie ein Backup:
Wenn der Rebase-Befehl mit Folgendes fehlschlägt:
Sie müssen die folgenden Schritte ausführen, um:
Wenn ein Problem auftritt, führen Sie die Befehle als Administrator aus
quelle
tl; dr: Installieren Sie 64-Bit-Git für Windows 2 .
Technische Details
Dieses Symptom an sich hat nichts mit Image-Basen ausführbarer Dateien, beschädigten Cygwins gemeinsam genutzten Speicherabschnitten, widersprüchlichen Versionen von DLLs usw. zu tun.
Es ist Cygwin-Code, der keinen ~ 5 MB großen Speicherblock für seinen Heap an dieser festen Adresse 0x68570000 zuweisen kann, während dort anscheinend nur ein Loch mit einer Größe von ~ 2,5 MB verfügbar war. Der relevante Code ist in der msysgit-Quelle zu sehen .
Warum ist dieser Teil des Adressraums nicht frei?
Es kann viele Gründe geben. In meinem Fall wurden einige andere Module an einer widersprüchlichen Adresse geladen:
Die letzte Adresse wäre ungefähr 0x68570000 + 5 MB = 0x68C50000, aber es gibt diese WOW64-bezogenen DLLs, die ab 0x68810000 geladen werden und die Zuordnung blockieren.
Wenn eine gemeinsam genutzte DLL vorhanden ist, versucht Windows im Allgemeinen, diese in allen Prozessen unter derselben virtuellen Adresse zu laden, um eine gewisse Umzugsverarbeitung zu sparen. Es ist nur eine Frage des Peches, dass diese Systemkomponenten diesmal irgendwie an einer widersprüchlichen Adresse geladen wurden .
Warum ist Cygwin in deinem Git?
Weil Git eine umfangreiche Suite ist, die aus einigen einfachen Befehlen und vielen hilfreichen Dienstprogrammen besteht und hauptsächlich auf Unix-ähnlichen Systemen entwickelt wurde. Um es ohne massives Umschreiben erstellen und ausführen zu können, ist mindestens eine teilweise Unix-ähnliche Umgebung erforderlich.
Um dies zu erreichen, haben die Leute MinGW und MSYS erfunden - eine minimale Anzahl von Build-Tools, um Programme unter Windows auf Unix-ähnliche Weise zu entwickeln. MSYS enthält auch eine gemeinsam genutzte Bibliothek,
msys-1.0.dll
die bei einigen Kompatibilitätsproblemen zwischen den beiden Plattformen zur Laufzeit hilft. Und viele Teile davon wurden Cygwin entnommen, weil dort bereits jemand die gleichen Probleme lösen musste.Es ist also nicht Cygwin, sondern die Laufzeit-DLL von MinGW, die sich hier komisch verhält.
In Cygwin hat sich dieser Code seit MSYS 1.0 stark verändert - die letzte Commit-Nachricht für diese Datei lautet "Import Cygwin 1.3.4" aus dem Jahr 2001!
Sowohl das aktuelle Cygwin als auch die neue Version von MSYS - MSYS2 - verfügen bereits über eine unterschiedliche Logik, die hoffentlich robuster ist. Es sind nur alte Versionen von Git für Windows, die noch mit dem alten kaputten MSYS-System erstellt wurden.
Saubere Lösungen:
Hacky-Lösungen:
PATH
kann manchmal funktionieren, da es möglicherweisemsys-1.0.dll
unterschiedliche Versionen von Git oder anderen MSYS-basierten Anwendungen gibt, die möglicherweise unterschiedliche Adressen, unterschiedliche Größen dieses Heaps usw. verwenden.msys-1.0.dll
kann Zeitverschwendung sein, da 1) eine DLL bereits Umzugsinformationen enthält und 2) "in jeder Version des Windows-Betriebssystems nicht garantiert werden kann, dass eine (...) DLL immer im selben Adressraum geladen wird". sowieso ( Quelle ). Dies kann nur helfen, wenn dasmsys-1.0.dll
selbst an der widersprüchlichen Adresse geladen wird, die es dann zu verwenden versucht. Anscheinend ist das manchmal der Fall, da dies die Git für Windows-Leute automatisch auf 32-Bit-Systemen tun .msys-1.0.dll
Binärdatei ursprünglich binär gepatcht , um einen anderen Wert für zu verwenden,_cygheap_start
und das Problem wurde sofort behoben.quelle
cmder/vendor/git-for-windows
Verzeichnis kopiert und den alten Ordner in umbenanntgit-for-windows-x86
. Wenn Sie öffnencmder/vendor/git-for-windows
, sehen Sie einen Ordnermingw32
, der Ihr Hinweis ist, dass Sie 32-Bit verwenden. Im x64 Git sehen Sie einen Ordnermingw64
.Sehr einfache Überprüfung der Rebase-Lösung:
Wechseln Sie zu dem Ordner, in dem git installiert ist, z.
Wenn Sie die Umschalttaste gedrückt halten und mit der rechten Maustaste in den Ordner klicken, sollten Sie von dort aus eine Eingabeaufforderung als Administrator öffnen können (danke an https://stackoverflow.com/users/355389/darren-lewis für diesen Kommentar).
Dann renne:
Dies hat es für mich behoben, als der Neustart-Ansatz nicht funktionierte.
Ich hoffe es hilft.
quelle
Ich habe die gleiche Fehlermeldung nach dem Upgrade auf git1.8.5.2 gesehen:
Machen Sie einfach eine Suche nach allen
msys-1.0.dll
auf IhremC:\
Laufwerk und stellen Sie sicher, dass die von Git verwendete zuerst kommt.In meinem Fall habe ich zum Beispiel einfach die Reihenfolge geändert:
Indem der Git-Pfad
C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\
in meinem an erster Stelle steht%PATH%
, ist die Fehlermeldung verschwunden.Sie müssen weder neu starten noch die DOS-Sitzung ändern.
Sobald das
%PATH%
in dieser DOS-Sitzung aktualisiert wurde, funktionieren die git-Befehle einfach.Beachten Sie, dass carmbrester und Sixto Saez beide Bericht unten (in den Kommentaren), das auf Neustart , um das Problem zu beheben.
Hinweis: Entfernen Sie zunächst alle
msys-1.0.dll
, z. B. eine in%LOCALAPPDATA%
quelle
Wenn ein Neustart das Problem nicht behebt (wie in der Antwort von Greg Hegwill vorgeschlagen), überprüfen Sie Ihren PATH auf widersprüchliche Installation (en) der msys-1.0.dll (und möglicherweise anderer verwandter DLLs).
In meiner speziellen Situation hat MinGWs Installation von msys eine Kopie dieser DLL in seinem
bin
Verzeichnis (<MinGW_Install_Path>\msys\1.0\bin
) und sie wurde im PATH aufgelistet. Dascmd
Verzeichnis von Git wurde im PFAD aufgeführt, aberbin
nicht. (Gits Version von msys-1.0.dll befindet sich imbin
Verzeichnis. Anscheinend fügt die Standardinstallation von MSys-Git sie nichtbin
dem PATH hinzu.)Eine vorübergehende Korrektur bestand darin, das
bin
Verzeichnis von Git zum PATH hinzuzufügen, sodass es vor den Pfaden von MinGW angezeigt wird. (Eine dauerhaftere Lösung beinhaltet wahrscheinlich das Aussortieren der Pfadkonflikte zwischen msG von MinGW und Git und / oder das Entfernen der doppelten msys-Installationen.)quelle
Ich möchte nur meine Erfahrungen hier teilen. Beim Cross-Compilieren für die MTK-Plattform auf einem Windows 64-Bit-Computer bin ich auf dasselbe Problem gestoßen. MinGW und MSYS sind am Bauprozess beteiligt, und dieses Problem ist aufgetreten. Ich habe es gelöst, indem ich die
msys-1.0.dll
Datei geändert habe. Wederrebase.exe
ein Systemneustart hat bei mir funktioniert.Da auf meinem Computer keine rebase.exe installiert ist. Ich habe cygwin64 installiert und das
rebase.exe
Innere verwendet:Obwohl die Umbasierung erfolgreich aussah, blieb der Fehler bestehen. Dann habe ich den
rebase
Befehl im Cygwin64-Terminal ausgeführt und eine Fehlermeldung erhalten:Ich habe später eine Paaradresse ausprobiert, aber keine hat funktioniert. Also habe ich die
msys-1.0.dll
Datei geändert und das Problem gelöst.quelle
Ich bin heute darauf gestoßen. Unter der Leitung von Greg Hewgills Antwort habe ich mir angesehen, wie Prozesse auf meinem System ausgeführt werden, um festzustellen, ob etwas "hängen geblieben" ist oder ob andere Benutzer am Computer angemeldet sind, die etwas mit Git tun. Ich habe dann cygwin (separat installiert) auf diesem bestimmten Computer gestartet. Es startete ok. Ich habe es geschlossen und dann die Git-Erweiterungen erneut versucht (ich habe eine Pull-Operation versucht) und es hat funktioniert. Ich bin mir nicht sicher, ob der Start von Cygwin etwas freigegeben hat, das geteilt wurde, aber dies ist das erste Mal, dass ich auf diesen Fehler gestoßen bin, und dies schien ihn für mich zu beheben.
quelle
Ich hatte das gleiche Problem nach einem Absturz und Update von Windows 8.0 auf msys git 1.9. Ich habe kein msys / git in meinem Pfad gefunden, also habe ich es einfach in den Windows-Einstellungen für lokale Benutzer hinzugefügt. Es funktionierte ohne Neustart.
Im Grunde genommen ähnlich zu RobertB, aber ich habe nicht irgendwelche git / msys in meinem Weg.
Übrigens:
Ich habe versucht, rebase -b blablabla msys.dll zu verwenden, hatte aber den Fehler "ReBaseImage (msys-1.0.dll) ist mit dem letzten Fehler = 6 fehlgeschlagen".
Wenn Sie dies schnell benötigen und keine Zeit zum Debuggen haben, habe ich festgestellt, dass "Git Bash.vbs" im Git-Verzeichnis erfolgreich die Bash-Shell startet.
quelle
c:\Program Files (x86)\Git\bin
Zum Pfad hinzugefügt und jetzt bin ich golden.Dieser Fehler tritt auf meinem Windows-Computer sehr selten auf. Am Ende habe ich den Computer neu gestartet und der Fehler ist behoben.
quelle
Ich bin auf dieses Problem beim LPCEXpresso-Gebäude gestoßen. Wenn Sie das C: \ MinGW \ bin im PATH haben. Irgendwie musste ich es entfernen, um dieses Problem zu beseitigen, da einige andere MinGW-ähnliche ebenfalls darauf basierten
quelle
Um dieses Problem zu beheben, lasse ich Tortoise Git einfach das Update installieren.
quelle
c: \ msysgit \ bin> rebase.exe -b 0x50000000 msys-1.0.dll
quelle
Das Löschen der alten Version von% USERPROFILE% \ AppData \ Local \ SourceTree \ app-xxx hat bei mir funktioniert. Nicht sicher, wie es mit Kommandozeilen-Git verbunden war ...
quelle