2009-12-08 2 views
6

Ich habe ein Repository, in dem viele große Binärdateien leben. Ist es möglich, git so einzustellen, dass es nur die letzte n Anzahl von Commits behält? So wie ich nur die letzten 5 Kopien von Dateien in diesem Repository-Verlauf behalten möchte? Aber ich möchte das nicht alle 5 Commits manuell machen?Halten Sie eine bestimmte Anzahl von Commits im Verlauf mit Git

+1

Ich bezweifle es, aber ich mag die Idee. –

Antwort

3

Verwenden Sie "git rebase --interactive". Markieren Sie die ersten fünf Commits als "Pick" und den Rest als "Squash".

+0

wenn aus anderen Repos gezogen, die auch synchronisieren würden, ja? –

+0

Geklonte Verzeichnisse müssen jedes Mal, wenn Sie den Verlauf ändern, den vollständigen geänderten Verlauf abrufen. Ein "Git-Abruf" aus einem geklonten Repository kann also einige Zeit dauern - aber ja, sie werden synchronisiert. – Bombe

2

Kindasorta. git clone --depth N können Sie einen "flachen Klon" des Repository machen. Sie können jedoch nicht push/clone/fetch von diesem, so dass es als Entwickler nicht sehr nützlich ist.

+0

ich weiß darüber, aber ich will auch nicht mehr als 5 Kopien in nicht der Repos, nicht nur Klone zu halten. –

+0

Das ist nicht möglich, Sie müssen das Repository neu schreiben, wie @Dustin vorschlägt. Ich schlage vor, dass Sie neu bewerten, wie Sie diese riesigen Dateien speichern möchten. Vielleicht ist Git nicht die beste Lösung. –

4

Die einzige Möglichkeit, dies zu tun, besteht darin, das Repository regelmäßig neu zu schreiben.

Ein Commit enthält einen Hash der Commit-Metadaten, die Commit-Informationen, die Eltern des Commits und den Baum, den Sie committen. Es ist nicht möglich, etwas in der Vergangenheit zu ändern, ohne die Gegenwart zu beeinflussen.

3

Wie Dustin bereits erwähnt hat, ist die einzige Möglichkeit, das Repository regelmäßig neu zu schreiben. Git hat definitiv keine "eingebaute" Unterstützung dafür, und wird wahrscheinlich auch keine solche Unterstützung haben (das grundlegende Design der Sache schließt diese Eigenschaft aus). Das bedeutet, wenn Sie es tun wollen, müssen Sie es manuell tun.

Wenn Sie es versuchen möchten, die Antwort auf this question zeigt ein Beispiel, wie dies mit git filter-branch getan werden kann.