Scheint, als würde mein Projekt mit jedem Git größer und größer commit/push
. Gibt es eine Möglichkeit, meinen Git-Ordner zu bereinigen?
156
Ich bin mir nicht sicher, was du willst. Zuallererst wird das Verzeichnis natürlich jedes Mal, wenn Sie es festschreiben / pushen, etwas größer, da es jedes dieser zusätzlichen Festschreibungen speichern muss.
Wahrscheinlich möchten Sie jedoch, git gc
welche "unnötige Dateien bereinigen und das lokale Repository optimieren" ( Handbuchseite ).
Ein weiterer möglicherweise relevanter Befehl ist git clean
das Löschen nicht verfolgter Dateien aus Ihrem Baum ( Handbuchseite ).
WARNING
Der Befehl wie oben geschrieben von @Kalle wird entfernen EVERY > untracked <Datei- und Verzeichnis innerhalb Ihrer GIT ROOT , nicht nur „Dateien in .gitignore aufgeführt“. Alles, was nicht von Git verfolgt wird, unabhängig davon, ob es in aufgeführt ist oder nicht,.gitignore
wird gelöscht.git clean -dfX
(Beachten Sie den Fall auf derX
) entfernt nur Elemente, für die eine geltende Regel gilt.gitignore
. Bitte beachten Sie diese Warnung: Führen Sie niemals aus,git clean
ohne sie entweder im interaktiven Modus auszuführen ,-i
anstatt-f
oder zumindest zuerst einen Trockenlauf durchzuführen --n
und dann erneut mit-f
.Lauf:
Löscht alle veralteten Verfolgungszweige, die bereits entfernt wurden,
origin
aber lokal noch verfügbar sindremotes/origin
.' G arbage C ollection' - läuft Verwaltungsaufgaben (Kompressen Revisionen, entfernt lose / unzugängliche Objekte). Das
--auto
Flag bestimmt zuerst, ob Arbeit erforderlich ist, und wird beendet, ohne etwas zu tun, wenn nicht.quelle
Ein Szenario, in dem Ihr Git-Repo mit jedem Commit ernsthaft größer wird, ist eines, in dem Sie Binärdateien festschreiben, die Sie regelmäßig generieren. Ihre Speicherung ist nicht so effizient wie die von Textdateien .
Eine andere ist eine, bei der Sie eine große Anzahl von Dateien innerhalb eines Repos (was eine Grenze für Git darstellt ) anstelle mehrerer Subrepos ( die als Submodule verwaltet werden ) haben.
In diesem Artikel über Git Space erwähnt AlBlue:
Wenn Sie große Binärdateien in Ihrem Git-Repo gespeichert haben, können Sie Folgendes berücksichtigen:
git filter-branch
entfernen (Warnung: Dadurch wird der Verlauf neu geschrieben. Dies ist schlecht, wenn Sie Ihr Repo bereits gepusht haben und andere daraus gezogen haben.)Wie ich in " Was sind die Dateilimits in Git (Anzahl und Größe)? " Erwähnt habe , ist das neuere (2015, 5 Jahre nach dieser Antwort) Git LFS von GitHub eine Möglichkeit, diese großen Dateien zu verwalten (indem sie außerhalb des Git gespeichert werden) Git-Repository).
quelle
ja ja,
git gc
ist die lösung natürlichund lokal - Sie können das lokale Repository einfach löschen und erneut klonen.
aber hier gibt es etwas Wichtigeres ...
Die Sekunden, die Sie auf die Verarbeitung dieses riesigen Git & Externals warten, werden in langen Minuten erfasst, in denen Stunden ineffizienter Zeit erfasst werden.
Erstellen Sie ein neues Repository (nicht nur ein Zweig) von Grund auf neu , einschließlich der einzigen aktuellen Version von Dateien. Natürlich verlieren Sie den gesamten Verlauf.
Aber wenn es in der Code-Welt nicht an der Zeit ist, sentimental zu werden, macht es keinen Sinn, die gesamten 5 Jahre des Codes bei jedem Commit oder Diff mitzuziehen. Sie können das alte Git & Externals trotzdem irgendwo speichern, wenn Sie nostalgisch werden:]
aber irgendwann muss man wirklich mitmachen:]
Ihr Team wird es Ihnen danken!
quelle
Das Ausführen dieses Befehls ist äußerst gefährlich, verkleinert jedoch Ihr Repository, indem alle Ihre Git-Wiederherstellungs- / Sicherungsdateien gelöscht werden:
Es löscht alle Dateien, die git verwendet, um Ihr Repository von einem fehlerhaften Befehl wiederherzustellen. Wenn Sie dies beispielsweise getan haben
git reset --hard
, können Sie normalerweise die verlorenen Dateien wiederherstellen. Aber wenn Sie diesgit reset --hard
vor demgit reflog expire...
Befehl tun , haben Sie alles verloren. Jetzt besteht Ihre einzige Hoffnung darin, ein Tool zu verwenden, das Ihr Dateisystem analysiert und versucht, die gelöschten Dateien wiederherzustellen, wenn sie nicht überschrieben wurden.quelle
git clean -d -f -i
ist der beste Weg, es zu tun.Dies hilft bei einer kontrollierten Reinigung.
-i
steht für interaktiv.quelle
git clean
nicht für die Bereinigung des Repos , sondern für die Bereinigung des Verzeichnisses gilt. Für Benutzer, die blind kopieren / einfügen, ist Vorsicht geboten. Dadurch werden nicht verfolgte Dateien / Verzeichnisse entfernt, die Sie möglicherweise tatsächlich lokal benötigen.Ich weiß nicht, ob es schrumpfen wird, aber nachdem ich es ausgeführt habe
git clean
, mache ich es oftgit repack -ad
auch, was die Anzahl der Packdateien verringert.quelle
git gc
Prozesses, daher muss es nicht separat ausgeführt werden