2016-07-25 13 views
0

Ich habe riesige Git-Repository (Binärdateien) und ich möchte alte Commits löschen, um seine Größe zu verkleinern.Git - wie alte commits zu löschen, ohne die letzten commits sha-1 zu beeinflussen?

Übernehmen Sie meine Commit-Geschichte;

$ git log 
g0g0g0 - patch 06 
f0f0f0 - patch 05 
e0e0e0 - patch 04 
d0d0d0 - patch 03 
c0c0c0 - patch 02 
b0b0b0 - patch 01 
aaaaaa - initial empty 

Und jedes commits hat tag;

$ git tag 
tag01 -> b0b0b0 
tag02 -> c0c0c0 
tag03 -> d0d0d0 
tag04 -> e0e0e0 
tag05 -> f0f0f0 
tag06 -> g0g0g0 

Hier ist was ich will;

$ git log 
g0g0g0 - patch 06 <- tag06 
f0f0f0 - patch 05 <- tag05 
e0e0e0 - patch 04 <- tag04 
aaaaaa - initial empty 

$ git tag 
tag01 -> deleted b0b0b0 
tag02 -> deleted c0c0c0 
tag03 -> deleted d0d0d0 
tag04 -> e0e0e0 
tag05 -> f0f0f0 
tag06 -> g0g0g0 

Ist es möglich, alte drei Commits (b0b0b0, c0c0c0, d0d0d0) zu löschen, ohne andere begehen die sha-1-Werte zu ändern (g0g0g0, f0f0f0, e0e0e0)?

+0

Sie können einen flachen Klon erstellen, oder wenn Sie mehr Präzision benötigen, können Sie Grafts und benutzerdefinierte Konstruktpacks mit 'git rev-list --objects' und' git pack-objects' verwenden und dann '.git/objects/ersetzen. pack 'mit den Ergebnissen. Dies funktioniert jedoch nur im lokalen Repo. Sie können den veröffentlichten Verlauf nicht ändern, ohne die veröffentlichten IDs zu ändern. – jthill

Antwort

8

Nein, das ist nicht möglich. Die Eltern eines Commits werden verwendet, um seinen Hash zu berechnen. Wenn sich ein Teil des Verlaufs ändert, wird sich der Commit-Hash unterscheiden.

Verwandte Themen