Beachten Sie, dass mit Git 2.21 (Q1 2019, 7+ Jahre später), git fast-export
ist vollständiger.
Das heißt, die Lösung basiert auf git fast-export
/ import
können jetzt mehr tun.
git fast-export master~5..master | \
(cd ../newrepo.git && git init . && git fast-import && git checkout)
Voir a965bb3 übergeben , 25dd3e4 festlegen , 530ca19 übertragen , Commit fdf31b6 , cd13762 festlegen , Übergabe f129c42 , Commit 1f30c90 , Übergabe b93b81e , Commit 4532be7 , Commit f55c979 , 843b9e6 übergeben (16. Nov. 2018) von Elijah Newren ( newren
) .
(Zusammengefasst von Junio C. Hamano -- gitster
-- in Übergabe 4d59753 , 04. Januar 2019)
fast-export: Hinzufügen der Option --show-original-ids zur Anzeige der Originalnamen
Die Kenntnis der ursprünglichen Namen (Hashes) von Commits kann manchmal eine Nachfilterung ermöglichen, die sonst schwierig oder unmöglich wäre.
Insbesondere ist es sehr schwierig, Commit-Meldungen umzuschreiben, die sich auf andere frühere Commits beziehen (zusätzlich zu allen anderen Filterungen), ohne die ursprünglichen Namen der einzelnen Commits zu kennen.
Darüber hinaus kann die Kenntnis der ursprünglichen Namen (Hashes) von Blobs eine Filterung nach blob-id
ohne dass der Inhalt des Blobs erneut gehasht werden muss, und ist daher als kleine Optimierung nützlich.
Sobald wir die Original-IDs für Commits und Blobs hinzugefügt haben, können wir sie der Vollständigkeit halber auch für Tags hinzufügen.
Vielleicht hat ja jemand eine Verwendung für sie.
Dieser Commit lehrt eine neue --show-original-ids
Option für den Schnellexport, die das Hinzufügen eines ' original-oid <hash>
Zeile zu Blob, Commits und Tags.
Sie lehrt auch fast-import
um solche Zeilen zu analysieren (und zu ignorieren).
Le site Manpage zeigt jetzt:
--show-original-ids:
Hinzufügen einer zusätzlichen Direktive zur Ausgabe für Commits und Blobs, original-oid <SHA1SUM>
.
Während solche Richtlinien wahrscheinlich von Importeuren wie git-fast-import
kann es für Zwischenfilter nützlich sein ( z.B. für das Umschreiben von Commit-Meldungen die sich auf ältere Commits beziehen, oder zum Strippen von Blobs nach Id ).
Und:
fast-export
: hinzufügen --reference-excluded-parents
Option
git filter-branch
hat eine raffinierte Funktion, die es erlaubt, z.B. nur die letzten 8 Commits einer linearen Historie zu überschreiben
git filter-branch $OPTIONS HEAD~8..HEAD
Wenn Sie das Gleiche versuchen mit git fast-export
erhalten Sie stattdessen eine Geschichte von nur 8 Übertragungen, mit HEAD~7
in eine Root-Übertragung umgeschrieben wird.
Es gibt zwei Alternativen:
- Verwenden Sie nicht die negative Revisionsangabe, und wenn Sie die Ausgabe filtern, um Änderungen an den letzten 8 Commits vorzunehmen, achten Sie darauf, dass Sie keine früheren Commits irgendwie verändern.
- Erster Lauf '
git fast-export --export-marks=somefile HEAD~8
', dann führen Sie ' git fast-export --import-marks=somefile HEAD~8..HEAD
'.
Beide Optionen sind fehleranfälliger, als mir lieb ist (die erste aus offensichtlichen Gründen; bei der zweiten Option habe ich manchmal versehentlich zu viele Revisionen in den ersten Befehl aufgenommen und dann festgestellt, dass die entsprechenden zusätzlichen Revisionen durch den zweiten Befehl nicht exportiert und somit nicht wie erwartet geändert wurden).
Außerdem sind beide aus Sicht der Leistung schlecht.
Hinzufügen einer neuen --reference-excluded-parents
Option, die dazu führt, dass fast-export
um auf Commits außerhalb des angegebenen rev-list-args-Bereichs durch ihre sha1sum zu verweisen.
Ein solcher Stream ist nur in einem Repository sinnvoll, das bereits die notwendigen Commits enthält (ähnlich der Einschränkung, die bei der Verwendung von --no-data
).
Die Dokumentation enthält jetzt:
--reference-excluded-parents:
Standardmäßig wird die Ausführung eines Befehls wie git fast-export master~5..master
wird die Übergabe nicht enthalten master~5
und wird master~4
haben nicht mehr master{tilde}5 als Elternteil (obwohl sowohl die alten master~4
und neu master~4
haben alle die gleichen Dateien).
使用方法 --reference-excluded-parents
damit der Stream stattdessen auf Commits im ausgeschlossenen Bereich der Historie anhand ihrer Sha1-Summe verweist.
Beachten Sie, dass der resultierende Stream nur von einem Repository verwendet werden kann, das bereits die erforderlichen übergeordneten Übertragungen enthält .