Wege zur Verbesserung der Git Status Performance
Habe ich ein repo von 10 GB auf einer Linux-Maschine ist auf NFS. Das erste mal git status
dauert 36 Minuten und die anschließende git status
dauert 8 Minuten. Scheint Git, hängt von der OS für das caching von Dateien. Nur die ersten git
Befehle wie commit
status
beinhaltet, dass pack/packen Sie das ganze repo nimmt eine sehr lange Zeit für einen riesigen repo. Ich bin nicht sicher, wenn Sie verwendet haben git status
auf einem so großen repo, aber hat jemand dieses Problem?
Habe ich versucht git gc
git clean
git repack
aber die Zeit ist noch/fast das gleiche.
Sub-Module oder andere Konzepte wie das Aufbrechen der repo in kleineren helfen? Wenn ja, welches ist das beste für die Aufteilung einer größeren repo. Gibt es irgendeine andere Möglichkeit zu verbessern und den Zeitaufwand für die git-Befehle auf einem großen repo?
InformationsquelleAutor der Frage Senthil A Kumar | 2011-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Genauer gesagt, git, hängt von der Effizienz der
lstat(2)
system nennen, so optimieren Sie Ihren client "Attribut-cache timeout" könnte den trick tun.Handbuch für
git-update-index
— im wesentlichen ein manueller Modus fürgit-status
— beschreibt, was Sie tun können, um dies zu beheben, indem verwenden Sie die--assume-unchanged
- flag zu unterdrücken, sein normales Verhalten und aktualisieren Sie manuell die Pfade, die Sie geändert haben. Könnten Sie auch das Programm in Ihrem editor unset dieses flag bei jedem mal, wenn Sie eine Datei speichern.Die alternative, wie Sie Sie vorschlagen, ist die Verringerung der Größe der Kasse (die Größe der packfiles nicht wirklich ins Spiel kommen, hier). Die Optionen sind eine sparse-checkout Submodule, oder die Google - repo tool.
(Es gibt eine mailing-Liste thread über die Verwendung von Git mit NFSaber es beantwortet nicht viele Fragen stellen.
InformationsquelleAutor der Antwort Josh Lee
Bin ich auch sehen, dieses problem auf ein großes Projekt gemeinsam über NFS.
Es dauerte einige Zeit, um entdecken Sie die fahne -uno werden können, die sowohl git commit und git status.
Was macht dieser Schalter ist zum deaktivieren suchen für nicht verfolgte Dateien. Dies reduziert die Anzahl der nfs-Operationen deutlich. Der Grund ist, dass, um für git zu entdecken, nicht verfolgte Dateien zu suchen in alle Unterverzeichnisse, also, wenn Sie haben viele Unterverzeichnisse dieses verletzt Sie. Durch die Deaktivierung von git auf der Suche für nicht verfolgte Dateien, die Sie beseitigen alle diese NFS-Operationen.
Kombinieren Sie dies mit der core.preloadindex Flagge und Sie können vernünftigen Performance auch auf NFS.
InformationsquelleAutor der Antwort user1077329
Versuchen git gc. Auch, git clean kann helfen.
UPDATE - Nicht sicher, wo der down-vote kam, aber der git-Handbuch ausdrücklich heißt:
Ich immer einen Unterschied feststellen nach dem ausführen von git gc, wenn git status ist langsam!
UPDATE II - Nicht sicher, wie ich verpasst hat, aber die OP schon versucht git gc und git sauber. Ich schwöre, dass war nicht es ursprünglich, aber ich sehe keine änderungen in den Bearbeitungen. Sorry für das!
InformationsquelleAutor der Antwort Jabari
Wenn Ihr git-repo macht starken Gebrauch von teilmodule, können Sie erheblich beschleunigen, um die Leistung von git status durch Bearbeitung der config-Datei in der .git-Verzeichnis und Einstellung
ignore = dirty
auf besonders große/schwere Submodule. Zum Beispiel:Verlierst du den Komfort einer Erinnerung, dass es unstaged änderungen in jedem der Teilgebiete, die Sie vielleicht vergessen haben, aber Sie behalten immer noch die wichtigsten Komfort von zu wissen, Wann die Submodule sind out-of-sync mit dem Haupt-repo. Plus, können Sie immer noch ändern Sie Ihr Arbeitsverzeichnis auf das Submodul selbst und mithilfe von git status als üblich, um zu sehen, weitere Informationen. Sehen diese Frage für mehr details über das, was "schmutzig" bedeutet.
InformationsquelleAutor der Antwort beno
Die Leistung von git status sollte verbessern mit Git 2.13 (Q2 2017).
Sehen commit 950a234 (14 Apr 2017) von Jeff Hostetler (
jeffhostetler
).(Zusammengefasst von Junio C Hamano --
gitster
-- in commit 8b6bba624 Apr 2017)>
string-list
: verwenden SieALLOC_GROW
makro wenn reallocingstring_list
Plus, Git 2.17 (Q2 2018) wird die Einführung einer neuen Spur, für die Messung, wo die Zeit, die verbracht wird in der index-schwere Operationen.
Sehen commit ca54d9b (27 Jan 2018) von Nguyễn Thái Ngọc Duy (
pclouds
).(Zusammengefasst von Junio C Hamano --
gitster
-- in commit 090dbea15 Feb 2018)Den gleichen Git-2.17 (Q2 2018) verbessert
git status
mit:commit f39a757commit 3ca1897commit fd9b544commit d7d1b49 (09 Jan 2018) von Jeff Hostetler (
jeffhostetler
).(Zusammengefasst von Junio C Hamano --
gitster
-- in commit 4094e4708 Mar 2018)"
git status
" verbringen eine Menge von Zyklen zu berechnen, die Beziehungzwischen den aktuellen Zweig und seine vorgelagerten, die jetzt
deaktiviert mit "
--no-ahead-behind
" - option.commit ebbed3b (25 Feb 2018) von Derrick Stolee (
derrickstolee
).InformationsquelleAutor der Antwort VonC
git config --global core.preloadIndex true
Haben den job für mich. Überprüfen Sie die offizielle Dokumentation hier.
InformationsquelleAutor der Antwort mklimek
Ich weiß nicht, welchen Sinn es macht, aber für mich Stand war unter 30 min, ich habe versucht, alles, was ich im Netz finden konnte, schließlich habe ich
git reset
ich hatte 100te von änderungen, die ich angewendet, von stash, stash, wo erstellt wurde, aus einer anderen Filiale aber angewendet auf diese Filiale, Sie waren alle inszeniert, aber nicht verpflichtet (nur zu erklären, was ich anders Tat, vor der Ausführung in dieser Ausgabe)git reset
dauerte 15 min, aber nach, dass alles funktioniert schnell, wie weniger als eine Sekunde für den status. Ich bin kein git Experte nur sagen, was habe mein Problem gelöst, hoffe es hilft anderen Menschen, die land auf dieser Seite.InformationsquelleAutor der Antwort Vivek