Msysgit Bash ist in Windows 7 schrecklich langsam

84

Ich liebe Git und benutze es unter OS X ziemlich ständig zu Hause. Bei der Arbeit verwenden wir svn unter Windows, möchten jedoch auf git migrieren, sobald die Tools vollständig ausgereift sind (nicht nur TortoiseGit , sondern auch etwas, das der wirklich schönen Visual Studio-Integration von VisualSVN ähnelt ). Aber ich schweife ab...

Ich habe kürzlich msysgit auf meinem Windows 7-Computer installiert , und wenn ich die mitgelieferte Version von bash verwende, ist es schrecklich langsam. Und nicht nur die Git-Operationen; cleardauert etwa fünf Sekunden . AAAAH!

Hat jemand ein ähnliches Problem erlebt?


Bearbeiten : Es scheint , dass msysgit nicht gut mit spielen UAC und könnte nur ein winziges Design Versehen von der Entwicklung auf XP resultierende oder mit Windows Vista oder 7 mit UAC deaktiviert; Starten von Git Bash mitRun as administrator Ergebnissen führt zu der Blitzgeschwindigkeit, die ich unter OS X sehe (oder auf 7 nach dem Starten von Git Bash ohne Netzwerkverbindung - siehe @ Gauthier-Antwort).

Edit 2 : AH HA! Siehe meine Antwort.

Kevin L.
quelle
Keine 5 Sekunden langsam, nein. Es wird langsamer sein, aber schneller als die Cygwin-Version.
Yann Ramin
@theatrus: Ich habe gerade eine Stoppuhr benutzt. Der Durchschnitt lag bei 3,8 Sekunden. Sie haben also Recht, aber etwas stimmt immer noch nicht.
Kevin L.
Eine andere Msysgit-Verlangsamung ist eine alte Version von OpenSSH, die hier dokumentiert ist. Darrell.mozingo.net/2011/09/29/…
JodaStephen
Siehe msysgits Wiki-Seite auf dieser: github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow
Drew Noakes
1
Mögliches Duplikat von Git / Bash ist in Windows 7 x64 extrem langsam
Joshua Taylor

Antworten:

54

Sie können Git unter Windows erheblich beschleunigen, indem Sie drei Befehle ausführen, um einige Konfigurationsoptionen festzulegen:

git config --global core.preloadindex true
git config --global core.fscache true
git config --global gc.auto 256

Anmerkungen:

  • core.preloadindex führt Dateisystemoperationen parallel aus, um die Latenz auszublenden (Update: standardmäßig in Git 2.1 aktiviert)

  • core.fscache behebt UAC-Probleme, sodass Sie Git nicht als Administrator ausführen müssen (Update: standardmäßig in Git für Windows 2.8 aktiviert)

  • gc.auto minimiert die Anzahl der Dateien in .git /

Schuhmacher
quelle
Dies sollte nun die akzeptierte Antwort sein. Klappt wunderbar!
krlmlr
8
Das funktioniert bei mir nicht. Mein Git Bash hat immer noch 1-2 Sekunden Verzögerung, nachdem ich einen Befehl gegeben habe.
Jaskey
Arbeitete wie ein Zauber für mich; brachte meinen Git-Status auf einem großen Repo von 13 Sekunden auf 0,7 Sekunden
Noelob
2
git config --global core.fscache truetat nichts für mich; allerdings git config core.fscache truehat der Trick. Demnach liegt es daran , dass core.fscache eine Pro-Repo-Einstellung ist.
David Merriman
2
@DavidMerriman Der Kommentar "per repo" besagt lediglich, dass Sie diese Einstellung für einzelne Repos ändern können . (Was für alle Einstellungen gilt, daher weiß ich nicht, warum es überhaupt erwähnt wird.) Der Kommentar bedeutet nicht, dass es fscache nur als Pro-Repo-Einstellung funktioniert. Globale Einstellungen gelten für alle Repos auf einer Maschine, sofern sie nicht durch die Pro-Repo-Einstellungen überschrieben werden.
Shoelzer
37

Die Lösung für Langsamkeit unter Vista oder 7 scheint darin zu bestehen, Git Bash mit Run as administrator(oder durch Deaktivieren der Benutzerkontensteuerung für die Git Bash- Verknüpfung ... oder durch vollständiges Deaktivieren der Benutzerkontensteuerung auszuführen ). Der Unterschied ist Tag und Nacht und die Verwendung von Git auf 7 ist wieder fantastisch.

Dies scheint mit einem bekannten Problem zu tun zu haben, und wie ich spekuliert habe, ist XP als Entwicklungsumgebung für msysgit teilweise verantwortlich.

Kevin L.
quelle
Netter Hinweis (auch wenn es ungewollt war :)). Das Ausführen von "git svn clone" in Windows 2008 R2 mit 1.7.4 war für mich furchtbar langsam (es gibt mehr als 5000 Commits in SVN und es hat Wochen gedauert, nur um die Hälfte davon zu bekommen) ... Sie haben mir die Idee gegeben, es zu versuchen in seiner "nativen" Umgebung unter XP, und es ist tatsächlich sehr schnell. Vielen Dank!
Bdrajer
1
Ich habe die Benutzerkontensteuerung deaktiviert und versucht, sie beim Administrator auszuführen, und dennoch dauert die Ausführung jedes Befehls, den ich in Git Bash eingebe, ungefähr 5 Sekunden (selbst lsin einem praktisch leeren Verzeichnis)
Robin Winslow,
4
Die Antwort in dieser Frage funktionierte stattdessen für mich: stackoverflow.com/questions/4485059/…
Robin Winslow
Das Verschieben von Repos auf eine Nicht-Systempartition zeigte auch große Leistungssteigerungen für mein Team und verhinderte die zufälligen Probleme beim Erstellen von Dateien, bei denen keine Datei erstellt werden konnte.
Laurence
1
Ich habe viele Lösungen ausprobiert. Diese (die als Administrator ausgeführt wird) hat endlich für mich funktioniert. Jetzt ist mein Git wieder blitzschnell. Danke. :)
AweSIM
14

Für mich war das Problem die Verwendung von __git_ps1 in der Shell-Eingabeaufforderung - ich denke aufgrund des langsamen Festplattenzugriffs in msysgit.

Die Lösung bestand darin, $ (__ git_ps1) aus den Zeilen PS1 = ... in / etc / profile zu entfernen

Schnelltest, ob diese Lösung zutrifft: Geben Sie in einer Git-Shell export PS1 = '$' ein und überprüfen Sie die Geschwindigkeit Ihrer Vorgänge.

chrisxxyy
quelle
Vielen Dank! Dies stellte sich unter Windows XP als mein Problem heraus. Siehe stackoverflow.com/q/5851611/200688
AndyL
2
Sie können wahrscheinlich __git_ps1aktiv lassen , wenn Sie die Einstellungen SHOWDIRTYSTATE und / oder SHOWUNTRACKEDFILES deaktivieren, siehe stackoverflow.com/a/4203968/321973
Tobias Kienzler
Dies war alles, was ich unter Windows 7 brauchte. Besonders glücklich, da dieser Computer ohne Administratorrechte gesperrt ist!
Air
12

Versuchte fast alle Tipps hier (einschließlich der aus meiner anderen Antwort) auf einem neuen Computer, aber sie funktionierten nicht, Git immer noch langsam wie die Hölle.

Dann habe ich mir die vorinstallierte Virusscanning-Software angesehen: Ich habe das Echtzeit-Scannen des McAfee Security Centers deaktiviert , und presto: git ist jetzt blitzschnell! Die für "git svn rebase" benötigte Zeit sank von 30 auf 5 Sekunden (!).

Ich hoffe, dass dies für andere Leute hilfreich ist, die immer noch Probleme mit langsamem Git unter Windows haben. Ich habe Stunden verloren, um das herauszufinden.

Tom De Leu
quelle
4
Mein Git Bash startet auch langsam vorher, nachdem ich den gesamten Pfad der Git-Installation zum Ausschlusspfad von Avast hinzugefügt habe! Anti-Virus Suite, Git Bash beginnt niedriger als 0,5s
zhxchen17
Das war die Antwort für mich !! Ich benutze AVG Free. Ich habe es gerade für 10 Minuten deaktiviert, plötzlich ist die veeerrryyyy träge Bash blitzschnell.
Mörre
Wenn Sie Windows Defender verwenden, können Sie einen Ordner oder Prozess ausschließen. Siehe support.microsoft.com/en-us/help/4028485/…
Ehtesh Choudhury
9

Leider hat 'Als Administrator ausführen' bei mir nicht funktioniert - aber wie Kevin L herausfand, funktionierte das Trennen des Netzwerkadapters, das Starten von git bash und das erneute Verbinden einwandfrei. Also habe ich dies in ein Batch-Skript eingepackt und eine Verknüpfung in mein Startmenü eingefügt, die als Administrator gekennzeichnet ist:

netsh interface set interface "Local Area Connection" DISABLED
cd "%USERPROFILE%\Documents\Visual Studio 2010\Projects"
start cmd /c ""C:\Program Files\Git\bin\sh.exe" --login -i"
netsh interface set interface "Local Area Connection" ENABLED

Funktioniert ein Vergnügen, solange ich mich erinnere, dass mein Netzwerk vorübergehend unterbrochen wird.

(Win 7 Professional SP1, Git Version 1.7.8-Vorschau20111206)

Daniel Hume
quelle
5

Ein Kollege von mir hatte dieses Verhalten, wenn Outlook ausgeführt wurde. Ich versuche, Outlook zu töten und erneut zu testen.

Sie können auch versuchen zu testen:

  • ohne Verbindung zu einem Netzwerk,
  • ohne Antivirus,
  • ohne dass ein anderes Programm läuft.
Gauthier
quelle
3
Weder Outlook noch Antivirus scheinen Auswirkungen zu haben, aber wenn ich meine Netzwerkverbindung deaktiviere und dann git starte, ist es blitzschnell (sprich: "Unix"), selbst nachdem ich die Verbindung wieder hergestellt habe. Interessant ...
Kevin L.
Ja. Und Git Bash bleibt schnell (bis ich es schließe und eine andere Instanz öffne).
Kevin L.
2
Die Netzwerkverbindung hat auch bei mir funktioniert. Ich frage mich, was es mit der Netzwerkverbindung zu tun hat. Und seltsamerweise funktioniert es in meinem Heimnetzwerk einwandfrei, weigert sich jedoch, in meinem Büronetzwerk zu arbeiten.
Sarath
Dies hat mein Problem unter Windows 7 Professional 64-Bit auf einem brandneuen iMac behoben. Prost!
Longda
+1 Antivirus wie vorgeschlagen war die Ursache auf meinem speziellen System. Windows 7 x 64 Ultimate. UAC (an anderer Stelle erwähnt) machte leider keinen Unterschied.
Vielen
3

Wir haben festgestellt, dass bei der Ausführung auf bestimmten Benutzerkonten separate git.exe-Instanzen bei einem Aufruf von blockiert werden WaitForSingleObject(), sodass nur eine einzige git.exe-Operation gleichzeitig effektiv ausgeführt werden kann. Das Ändern des Benutzerkontos hat dieses Problem umgangen.

Details hier: https://stackoverflow.com/a/13054022

Matthew Skelton
quelle
3

Ich habe MacAffee und fordere es auf, das .git-Verzeichnis und alle Unterverzeichnisse vom Echtzeit-Scannen auszuschließen, um das Leistungsproblem zu beheben.

Alex Brown
quelle
1
Können Sie die gesamte Festplatte ausschließen? ;-).
Peter - Reinstate Monica
1

Wie in dieser Ausgabe zu sehen ist , macht das Ausführen mit deaktivierter UAC-Virtualisierung (es ist nicht erforderlich, die UAC vollständig zu deaktivieren) einen großen Unterschied.

In diesem Beitrag wird erläutert, wie Sie es deaktivieren (siehe unten im Beitrag, nur eine Registrierungseinstellung).

Bei einem (großen) SVN-Repo, mit dem ich eine Verbindung herstelle, wurde durch die oben genannte Änderung die für "git svn rebase" benötigte Zeit von 15 auf 5 Sekunden gesenkt, was eine Verbesserung um den Faktor 3 darstellt.

Tom De Leu
quelle
Diese Ausgabe (Tracker) wurde geschlossen. Die neue Ausgabe hierzu lautet: github.com/msysgit/git/issues/94
childno͡.de
1

Eine Alternative zum Herumspielen mit der Windows 7-Benutzerkontensteuerung besteht darin, mysysgit außerhalb Ihres Ordners "Programme" zu installieren. Versuchen Sie beispielsweise anstelle von "C: \ Programme (x86) \ Git", in "C: \ git" zu installieren.

Ich habe erfolglos versucht, mit 'Als Administrator ausführen' und UAC-Steuerelementen herumzuspielen, aber aufgegeben und eine Neuinstallation gestartet. Ich hatte vorher ungefähr 15KiB / s, aber jetzt sind es über 60kiB / s.

Frank Yin
quelle
1

Wenn das Ausschalten der Benutzerkontensteuerung die Leistung nicht verbessert, schalten Sie den luafv-Treiber aus. Dies funktionierte für mich, nachdem ich fast alles auf dieser Seite und einige ähnliche Fragen ausprobiert hatte. Git ist von ungewöhnlich langsam zu ziemlich anständig geworden.

Öffnen Sie 'regedit' und suchen Sie den Registrierungsschlüssel

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv

Ändern Sie den Wert von Start von 2 auf 4.

Die Details zum Deaktivieren luafv habe ich hier gefunden . Beachten Sie, dass ich persönlich keine Ahnung habe, wasluafv ist oder tut. Diese Seite enthält verschiedene Warnungen vor schlechten Dingen, die beim Ausschalten auftreten können und die Sie wahrscheinlich ernst nehmen sollten.

EDIT: Der Kommentar unten hat darauf hingewiesen, dass ich das falsch herum verstanden habe (der Link hat es richtig herum). Es ist jetzt behoben. Entschuldigung an die Leute, deren Register ich weggeworfen habe :)

jwg
quelle
Meins ist standardmäßig auf 2 eingestellt. Immer noch ziemlich langsam.
Imanuelcostigan
@imanuelc: Ironischerweise ist meins jetzt auch (auf einem neuen Computer) und es ist auch langsam.
JWG
2
Das ist falsch. Es sollte von 2 auf 4 geändert werden. 2 bedeutet Autostart. 4 bedeutet deaktiviert.
Richb
1

Ich habe gerade eine Weile Fehlerbehebung durchgeführt und es fiel mir schwer, die Ursache des Problems zu ermitteln. Am Ende fand ich zwei Dinge, die einen dramatischen Einfluss hatten:

  • Deaktivieren Sie den Windows-Suchdienst. Dies hatte dramatische Auswirkungen auf die Leistung.
  • Git-Erweiterungen schließen. Wenn das Fenster "Git-Erweiterungen durchsuchen" im Hintergrund geöffnet war, erhöhten sich die Ausführungszeiten für Cygwin-Git-Befehle um einen scheinbar zufälligen Faktor von bis zu 10.
bjos
quelle
0

Das Problem hier könnte die Bash-Vervollständigung sein, wenn diese aktiviert ist, was unter Windows etwas langsamer ist als unter Linux.

Versuchen Sie, die PS1-Variable auf etwas Einfaches wie "$" zu setzen, und prüfen Sie, ob dies die Dinge beschleunigt. Wenn dies der Fall ist, beachten Sie, dass die Bash-Vervollständigung in den neuesten Git-Versionen optimiert wurde. Möglicherweise müssen Sie ein Upgrade durchführen.

Kusma
quelle
1
Ich verwende die neueste Version (siehe meine Kommentare zur Antwort von VonC oben). Aber ich werde es versuchen.
Kevin L.
1.7.0.2 ist in diesem Zusammenhang nicht unbedingt die Neueste. Die Optimierungen, über die ich spreche, sind in Upstream-Git passiert. Ich bin mir nicht sicher, ob sie für die Version 1.7.0.2 von Git für Windows bereit waren oder nicht.
Kusma
0

Das hat bei mir funktioniert. Erwarten Sie nicht, dass es sich um eine Einheitslösung handelt.

Überprüfen Sie die Umgebungsvariable $ HOME in Bash und Windows. Wenn es auf ein Benutzerkonto verweist, überprüfen Sie das Windows-Profil / die Berechtigungen des Benutzers. Ändern Sie entweder das Benutzerkonto oder das $ HOME entsprechend.

Deepak
quelle
6
Könnten Sie bitte etwas auf diese ominösen Profile / Permssionen eingehen?
Tobias Kienzler
0

Ich habe seit geraumer Zeit das gleiche Problem beim Ausführen von git für Windows (msysgit) unter Windows 7 x64 als eingeschränktes Benutzerkonto festgestellt. Nach dem, was ich hier und an anderen Orten gelesen habe, scheint das gemeinsame Thema das Fehlen von Administratorrechten und / oder Benutzerkontensteuerung zu sein. Da die Benutzerkontensteuerung auf meinem System deaktiviert ist, ist die Erklärung, dass versucht wird, etwas in das Programmdateiverzeichnis zu schreiben / löschen, für mich am sinnvollsten.

Auf jeden Fall habe ich mein Problem gelöst, indem ich die tragbare Version von Git 1.8 mit zipinstaller installiert habe. Beachten Sie, dass ich die .7z-Verteilungsdatei entpacken und als Zip neu packen musste, damit das Zip-Installationsprogramm funktioniert. Ich musste dieses Verzeichnis auch manuell zu meinem Systempfad hinzufügen.

Die Leistung ist jetzt in Ordnung. Obwohl es im Verzeichnis Programme (x86) installiert ist, für das ich als eingeschränkter Benutzer keine Berechtigungen habe, scheint es nicht unter demselben Problem zu leiden. Ich schreibe dies entweder der Tatsache zu, dass die tragbare Version etwas konservativer ist, wenn sie Dateien schreibt / löscht, was wahrscheinlich der Fall ist, oder dem Upgrade von 1.7 auf 1.8. Ich werde nicht versuchen herauszufinden, welcher der Grund ist. Es reicht zu sagen, dass es jetzt viel besser funktioniert .

Binäres Phile
quelle
0

Möglicherweise möchten Sie versuchen, msysgit zu deinstallieren, Windows neu zu starten und die neueste Version von msysgit zu installieren. Es schien den Trick für mich zu tun. Ich habe diesen Vorschlag hier gefunden:

https://stackoverflow.com/a/4506192/1413941

BEARBEITEN

PS Ich hatte die Benutzerkontensteuerung bereits deaktiviert, bevor ich auf langsame Git-Probleme stieß. Daher weiß ich nicht, ob die Deaktivierung der Benutzerkontensteuerung erforderlich ist oder nicht, damit Git schnell funktioniert.

Herr Grumps
quelle
0

Die beste Lösung ist, wie bereits erwähnt, als Administrator zu arbeiten. Eine weitere Option, um den Git-Status zumindest schnell zu machen , ist trustctime = false . Vorher dauerte dieser Git-Status ungefähr 30 Sekunden und danach ist es der gleiche Betrag, der in der Ausgabe angezeigt wird. Es dauerte X Sekunden, bis ...

TS '
quelle
0

Sie können auch einen wichtigen Leistungsschub erzielen, indem Sie die folgende Git-Konfiguration ändern:

git config --global status.submoduleSummary false

Beim Ausführen des einfachen git statusBefehls unter Windows 7 x64 dauerte die Ausführung meines Computers mehr als 30 Sekunden. Nachdem diese Option definiert wurde, erfolgt der Befehl sofort.

Durch Aktivieren von Gits eigener Ablaufverfolgung, wie auf der folgenden Seite erläutert, konnte ich den Ursprung des Problems ermitteln, das sich in Ihrer Installation unterscheiden kann: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so- langsam

Olivier
quelle
-4

Es ist wahrscheinlich eine Frage der Eingabeaufforderung, die Ihr Git-Repository analysiert. Sie können testen, indem Sie irgendwo außerhalb eines Git-Repositorys "clear" ausführen. Und Sie können es beschleunigen, indem Sie entweder git-finish.bash patchen oder mit core.filemode Streiche spielen.

Was die Visual Studio-Integration betrifft: Dies ist Open Source. Es ist unfair zu erwarten, dass andere kostenlos für Sie arbeiten.

Ich finde es auch ziemlich lustig, die Frage nicht auf der msysGit-Mailingliste zu stellen, aber jetzt schweife ich ab .

Dscho
quelle
5
Flammen auf StackOverflow sollten nicht toleriert werden. Bitte versuchen Sie, den Diskurs ziviler zu halten
29.
1
Es ist lustig. Mein Kommentar war der einzige Kommentar mit konkreten technischen Informationen. Das Angebot zur Behebung des Problems ist noch offen, wissen Sie? Und natürlich bin ich ziemlich verärgert darüber, dass das Problem hier beim Stackoverflow angesprochen wurde, den ich nicht überwache und auf den mich andere hinweisen mussten. Ich hätte es vorgezogen, direkt über das Problem zu hören. Ich weiß nichts über dich, aber ich finde es unfair, wenn das ursprüngliche Projekt nicht einmal über Probleme informiert wird.
Dscho
Zwei Jahre später stimme ich zu. Ich war zu hart Entschuldigung, Dscho. Die Git-Entwickler-Mailinglisten sind wirklich hilfreich.
Phord
2
@Dscho, du solltest verstehen, dass Leute oft zuerst hier posten, weil sie überprüfen möchten, ob es kein Konfigurations- oder Plattformproblem gibt, das kein Fehler in Git ist und ihr Problem verursacht.
JWG