Was ist der Unterschied zwischen „–tree-filter“ und „–index-filter“ im „git filter-branch“?

Lesezeit: 2 Minuten

Ich lerne “Baum” und “Index” aus diesem Artikel: Lernen von Git-Interna am Beispiel

Aber wenn es um den Befehl “git filter-branch” geht, weiß ich nicht, was der Unterschied zwischen “–tree-filter” und “–index-filter” ist.

  • Hast du die gelesen Dokumentation ?

    – Tim Biegeleisen

    28. März 2016 um 2:58 Uhr

  • @TimBiegeleisen Das tue ich, aber ich finde, dass dieses Git-Konzept schwer zu verstehen ist …

    – Zum Seitenanfang

    28. März 2016 um 3:13 Uhr

  • Man liest nicht einfach die Doku @TimBiegeleisen! Es gibt Abzeichen zu gewinnen! (Toller Name übrigens 😉 )

    – timhc22

    24. Februar um 2:48 Uhr


Die Kurzfassung ist das --tree-filter checkt jeden Commit in ein temporäres Verzeichnis aus, führt Ihren Filterbefehl aus und erstellt einen neuen Commit aus dem, was sich jetzt im temporären Verzeichnis befindet; während --index-filter kopiert jeden Commit in den Index, führt Ihren Filterbefehl aus und erstellt einen neuen Commit aus dem, was sich jetzt im Index befindet.

Das Kopieren eines Commits in den Index ist viel1 schneller als das Auschecken des Commit. Das Erstellen eines Commit aus dem Index ist schneller als das Erstellen eines Commit aus einem Verzeichnis. Daher ist die Verwendung des Indexfilters viel schneller als die Verwendung des Baumfilters. Es ist jedoch nicht so einfach, ein Skript dafür zu erstellen.


1Der genaue Geschwindigkeitsunterschied hängt von Ihrem temporären Verzeichnis ab: Ein In-Memory-Dateisystem ist schneller als ein Dateisystem auf einer SSD, das schneller ist als ein sich drehendes Medium, sodass Sie mehr gewinnen, wenn Sie sich drehende Medien verwenden, als wenn Sie könnten Verweisen Sie den Baumfilter auf ein In-Memory-Dateisystem. Aber auch dann ist der Indexfilter noch schneller.

Auf tatsächlichen Festplatten habe ich ungefähr einen Faktor von 100 oder so gesehen (daher entspricht ein Indexfilter, der 2 Minuten dauert, einem Baumfilter, der mehr als 3 Stunden dauert).

  • Erstaunliche zusätzliche Recherche dort @torek, kann dieses Zeug nicht lernen, indem man nur die Dokumente liest!

    – timhc22

    24. Februar um 2:51 Uhr

  • @timhc22: Ich gehe hier von einigen historischen Werten aus. Mitte der 200er oder frühen 201er Jahre habe ich viele Repository-Operationen durchgeführt. Musste eine Zeit lang echte rotierende Medien verwenden, hatte dann ein Ramdisk-Dateisystem, das ich später für einiges davon verwenden konnte …

    – Torek

    24. Februar um 10:54 Uhr

998680cookie-checkWas ist der Unterschied zwischen „–tree-filter“ und „–index-filter“ im „git filter-branch“?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy