Meine aktuelle Basis hat eine Gesamtgröße von ca. 200 MB.
Aber mein .git-Ordner hat eine erstaunliche Größe von 5 GB (!). Da ich meine Arbeit auf einen externen Server übertrage, brauche ich keine große lokale Historie ...
Wie kann ich den .git-Ordner verkleinern, um Speicherplatz auf meinem Notebook freizugeben? Kann ich alle Änderungen löschen, die älter als 30 Tage sind?
Vielen Dank für jede Hilfe :)
git count-objects -v
?Antworten:
Sie sollten nicht alle Änderungen löschen, die älter als 30 Tage sind (ich denke, es ist irgendwie möglich, Git auszunutzen, aber wirklich nicht empfohlen).
Sie können aufrufen
git gc --aggressive --prune
, wodurch die Speicherbereinigung in Ihrem Repository durchgeführt und alte Objekte entfernt werden. Haben Sie viele Binärdateien (Archive, Bilder, ausführbare Dateien), die sich häufig ändern? Diese führen normalerweise zu riesigen .git-Ordnern (denken Sie daran, dass git Snapshots für jede Revision speichert und Binärdateien schlecht komprimiert werden).quelle
git gc --aggressive
gilt das als schlechte Praxis. Es ist besser zu benutzengit repack -a -d --depth=250 --window=250
.git gc --aggressive
ruft repack mit einer Fenstergröße von 250 (vgl. manpage) und einer Tiefe von 250 (vgl. Quellcode) auf. --aggressive fügt zusätzlich den-f
Schalter hinzu, um alle vorherigen Delta-Operationen wegzuwerfen und zu wiederholen (wie auch im Link erwähnt)git gc --aggressive --prune
hat dies auf 19 MB reduziert.--prune
ist auch nicht erforderlich, da es seitdem zum Standard wurdev1.5.5-rc0
(Commit 25ee973 , März 2008).Hier ist, was der Schöpfer von Git Linus zu sagen hat, wie Sie Ihr Git-Repo verkleinern können:
Quelle: http://gcc.gnu.org/ml/gcc/2007-12/msg00165.html
Werden dadurch Binärdaten entfernt, die in meinem Repo verwaist sind? "git repack" entfernt keine Bilder oder Binärdaten, die Sie in Ihr Repo eingecheckt und dann gelöscht haben. Um diese Art von Daten dauerhaft aus Ihrem Repo zu löschen, müssen Sie Ihren Verlauf neu schreiben. Ein häufiges Beispiel dafür ist, wenn Sie versehentlich Ihre Passwörter in git einchecken. Sie können zurückgehen und einige Dateien löschen, aber dann müssen Sie Ihren Verlauf von damals bis heute neu schreiben und dann Push und dann neues Repo an Ihren Ursprung erzwingen.
quelle
fatal: Out of memory, malloc failed (tried to allocate 39763130 bytes)
repack
Wird der Shrink nach der lokalen Ausführung , einem Commit und einem Push auch remote ausgeführt?Ich habe es versucht, aber mein Repository war immer noch sehr groß. Das Problem war, dass ich versehentlich einige generierte große Dateien eingecheckt hatte. Nach einigem Suchen habe ich ein großartiges Tutorial gefunden, das es einfach macht, die großen generierten Dateien zu löschen. Mit diesem Tutorial konnte ich mein Repository von 60 MB auf <1 MB verkleinern.
quelle
5 GB vs 200 MB sind irgendwie komisch. Versuche zu rennen
git gc
.Aber nein, wenn Sie Ihr Repository nicht in Module aufteilen, können Sie die Größe des
.git
Verzeichnisses nicht verringern .Jeder Klon eines Git-Repos ist ein vollwertiges Repository, das als Server fungieren kann. Das ist das Grundprinzip der verteilten Versionskontrolle.
quelle
Ich verwende git eher als Synchronisationsmechanismus als für den Versionsverlauf. Meine Lösung für dieses Problem bestand darin, sicherzustellen, dass alle meine aktuellen Quellen in einem zufriedenstellenden Zustand sind, und dann einfach .git zu löschen und die Repos neu zu initialisieren. Speicherplatzproblem behoben. :-) Verlauf weg :-( Ich mache das, weil mein Repo auf einem kleinen USB-Stick ist. Ich möchte oder brauche nicht meinen gesamten Verlauf. Wenn ich eine Methode hätte, um nur den Verlauf abzuschneiden, würde ich das verwenden.
Wenn ich daran interessiert wäre, meinen Verlauf zu behalten, würde ich das aktuelle Repository archivieren. Irgendwann später könnte ich das ursprüngliche Repository klonen und alle Änderungen aus dem neuen Repo kopieren (nehmen wir an, ich habe nicht viel (irgendwelche) umbenannt oder gelöscht). Und dann machen Sie ein großes Commit, das alle im neuen Repo vorgenommenen Änderungen als ein einziges Commit im alten Repo darstellt. Ist es möglich, die Geschichten zusammenzuführen? Vielleicht, wenn ich einen Zweig verwendet und dann die Objekte gelöscht habe, die ich nicht brauchte. (Ich weiß nicht genug über Git-Interna, um so herumzuspielen).
quelle
Die oben beschriebenen Methoden haben in meinem Fall nichts funktioniert (wo ich den Git-Prozess versehentlich während des Git-Pushs abgebrochen habe), also musste ich das Repo endlich löschen und erneut klonen und jetzt hat der .git-Ordner die normale Größe.
quelle