2016-05-12 5 views
2

ich bfg bin mit ein paar Unterverzeichnisse von einem (Klon) Git Repository zu entfernen:git: --prune leer nach bfg Duplikate mit begeht

java -jar bfg-1.12.12.jar --delete-folders {folder1,folder2,folder3} --no-blob-protection myrepo.git/ 
git reflog expire --expire=now --all && git gc --prune=now --aggressive 

Dies funktioniert OK, aber nachdem ich bfg verwendet haben, ich habe viele leere Commits (dh mit schönen Log-Nachrichten, aber ohne Änderungen, weil sie nur Dateien berührten, die jetzt entfernt wurden).

So wie nächsten Schritt habe ich versucht,

git filter-branch --commit-filter 'git_commit_non_empty_tree "[email protected]"' HEAD 

oder

git filter-branch --prune-empty --tag-name-filter cat -- --all 

Beide Versionen die gewünschte Wirkung nicht zu verwenden (leer Commits zu entfernen).

Stattdessen, was ich am Ende mit ist ein Repository, in dem (siehe Screenshot unten, links vor dem Beschneiden ist, richtig ist nach):

  1. ein paar leeren Commits entfernt wurden
  2. leerste Commits
  3. bleiben
  4. nicht leer Commits werden in getrennten Zügen der Commits

enter image description here

dupliziert

Irgendwelche Ratschläge?

+0

Wie haben Sie 'myrepo.git' erstellt - ist es ein Bare/Mirror-Repository gemäß den BFG-Richtlinien? – javabrett

+0

Ich benutze 'git Klon - Spiegel https: //: @git ....'. Ist das der richtige Weg? – fuenfundachtzig

+0

Ja. Haben Sie auch zurück zu Ihrer "Herkunft" gegriffen und diese erneut geholt, bevor Sie mit "Filter-Verzweigung" begonnen haben? – javabrett

Antwort

3

Aus dem doppelten Verlauf, den Sie sehen, scheint es wahrscheinlich, dass Ihr Post-BFG-run versucht, den alten, jetzt neu geschriebenen Commit-Verlauf zu löschen. Dies kann aus einer Reihe von Gründen geschehen, aber die Hauptursache ist, dass kein Bare/Mirror-Clone-Repo ist, wie in den BFG-Anweisungen beschrieben.

Etwas behält die alte, vor BFG überschreiben Geschichte, die jetzt als ein Duplikat zeigt. Es ist möglich oder sogar wahrscheinlich, dass dieser Verlauf in einem Remote wie origin gespeichert wird, und dies würde auch erklären, warum Ihr filter-branch nicht alle leeren Commits entfernt, die Sie erwarten.

Schließlich könnte Sie eine aktuelle Pull-Anfrage zu add the --prune-empty-commits feature to BFG interessiert sein - es funktioniert gut und wie mit allem BFG, ist Größenordnungen schneller als das Laufen filter-branch.

+0

Welche Revision Hast du versucht zu bauen? Spätestens da PR 52a2ae7 in Ordnung sein sollte, hast du vielleicht eine ältere Version erstellt. Wenn diese rev nicht erstellt wird, hinterlassen Sie eine Notiz in der PR. – javabrett

+0

Nach der doppelten Überprüfung, dass ich die richtige Version auschecke, kompiliert es gut. (Sorry, ich habe zum ersten Mal versucht, eine Pull-Anfrage von GitHub zu kompilieren.) – fuenfundachtzig

+0

Es scheint auch viel besser zu funktionieren als die 'git filter-branch'-Lösung. Es bleiben ein paar nervige (leere) "Merge branch 'master" von ... "aber sonst ist die Geschichte sauber. – fuenfundachtzig

Verwandte Themen