2016-03-28 8 views
3

I „Baum“ und „Index“ aus dem diesem aritcle lernen: Learning Git Internals by ExampleWas ist der Unterschied zwischen "--tree-filter" und "--index-filter" im "git filter-branch"?

aber wenn es um „git filter-branch“ kommt Befehl, ich weiß nicht, was der Unterschied zwischen „--tree-Filter "und" --index-filter ".

+0

Haben Sie die [Dokumentation] (https://git-scm.com/docs/git-filter-branch) gelesen? –

+1

@TimBiegeleisen tue ich, aber ich finde dieses Git-Konzept ist schwer zu verstehen ... – GoTop

Antwort

7

Die kurze Version ist, dass --tree-filter jedes Commit in ein temporäres Verzeichnis auscheckt, den Filterbefehl ausführt und ein neues Commit von dem erstellt, was sich jetzt im temporären Verzeichnis befindet. während --index-filter jedes Commit in den Index kopiert, den Filterbefehl ausführt und ein neues Commit von dem erstellt, was sich jetzt im Index befindet.

Kopieren einer Commit in den Index ist viel schneller als das Commit auschecken. Das Erstellen eines Commits aus dem Index ist schneller als das Erstellen eines Commits aus einem Verzeichnis. Daher ist die Verwendung des Indexfilters viel schneller als die Verwendung des Strukturfilters. Es ist jedoch nicht so einfach zu skripten.


Der Unterschied genaue Geschwindigkeit hängt von Ihrem temporären Verzeichnis: ein In-Memory-Dateisystem ist schneller als ein On-SSD-Dateisystem, das als On-Spinnen-Medien schneller, so dass Sie gewinnen mehr, wenn Sie verwenden spinnende Medien, als wenn Sie den Strukturfilter auf ein speicherinternes Dateisystem verweisen können. Aber selbst dann ist der Indexfilter noch schneller.

Auf tatsächlichen Platten habe ich ungefähr einen Faktor von 100 oder so gesehen (daher ein Indexfilter, der 2 Minuten dauert, übersetzt sich zu einem Baumfilter, der 3+ Stunden dauert).

Verwandte Themen