2015-01-22 11 views
10

Git mysteriously führt Garbage Collection "von Zeit zu Zeit" und löscht und verwaiste Commits, die Sie haben.So verhindern Sie Garbage Collection in GIT?

https://www.kernel.org/pub/software/scm/git/docs/git-gc.html

Wissenschaftlich, wird dies etwa 6-8 Stunden auftreten, bevor Sie Sie wirklich gebraucht wird erkennen, dass begehen, die gerade gelöscht.

Ich möchte lieber nicht meine Dateien von Git gelöscht haben. Wie kann ich die automatische Speicherbereinigung vollständig deaktivieren?

+3

In der Standardkonfiguration wird es nur Commits löschen, die Waisen wurden (dh nicht seit mehr als 90 Tagen aus der Geschichte jeder Branche zugänglich). Es löscht Ihre Dateien nicht. Es hört auf, Dinge zu bewahren, die * Sie * vor Monaten gelöscht haben. –

+1

Oft habe ich den Pfad zu einem Commit unwissentlich zerstört und es durch eine Rebase verwaist. Meine Absicht ist nicht, diese Information wirklich zu löschen. –

+3

Fair genug - das ist eine vernünftige Präferenz. Ich persönlich bevorzuge einen Workflow, der einfach Dinge hält, die ich vielleicht noch in der Geschichte brauche. Ich würde vorschlagen, 'gc.reflogexpire' und Freunde für Ihren Anwendungsfall zu erhöhen, da dies das Auffinden aufgegebener Commits erleichtern wird. Es ist erwähnenswert, dass eine nie durchgeführte Garbage-Collection die Leistung von git verringern kann. –

Antwort

13

Vom very same page you just linked to:

Einige git Befehle können automatisch git gc ausführen; Weitere Informationen finden Sie unter --auto. Wenn Sie wissen, was Sie tun, und alles, was Sie wollen, ist dieses Verhalten deaktivieren dauerhaft ohne weitere Überlegungen, nur tun:

$ git config --global gc.auto 0 
+0

Nun ist nicht, dass das Ticket –

+0

Alles, was es mir sagt, ist‚bash: git: Befehl nicht gefunden‘ git Erweiterungen – Hatchling

+1

@Hatchling. Klingt wie Sie git installieren müssen – SLaks

2

Ein weiterer Ansatz, die vor kurzem dokumentiert in:
Dokumentation/config: erwähnen " now "und" never "für Einstellungen 'verfallen'

Zusätzlich Werte Stil approxidate (" 2.months.ago "" yesterday „), Verbraucher von 'gc.*expire*' Konfigurationsvariablen akzeptieren auch und respect 'now' ("do it soforce") und 'never' ("suppress fully").

Siehe commit 8cc8816 (28 Jul 2015) von Eric Sunshine (sunshineco).
Vorgeschlagen von: Michael Haggerty (mhagger).
(Verschmelzung durch Junio C Hamano -- gitster -- in commit 8cc8816 28 Jul 2015)

Das bedeutet dies auch jede gc verhindern würde:

git config --global gc.pruneExpire never 
git config --global gc.reflogExpire never