Die aktuelle Version von git branch --list
funktioniert hauptsächlich, aber sie ist langsam und umständlich. Während dies leicht in Git selbst repariert werden könnte, wird jeder Patch, der versucht, die Benutzeroberfläche zu verbessern, de facto abgelehnt.
Eine externe Befehls- git branch-list
ist die Lösung.
Warum ist git branch-list
besser?
git branch --list
Angenommen, Sie haben einen master
-Zweig, der einen Remote-Zweig verfolgt, aber nicht immer aktuell (wir werden das Repository von Linux verwenden).
In diesem Fall wird die offizielle git branch
Folgendes zeigen:
* master
Dies liefert nicht viele Informationen. Wenn Sie die Option --verbose
verwenden, erhalten Sie:
* master 9f4ad9e425a1 [behind 16592] Linux 5.12
Ok, wir sind bis 16592 Commits zurück, aber hinter was? Wir können aus dem Commit -Titel erraten, aber es ist nicht wirklich klar.
Wenn wir --verbose --verbose
verwenden, bekommen wir:
* master 9f4ad9e425a1 [origin/master: behind 16592] Linux 5.12
Schließlich haben wir einige nützliche Informationen, aber es dauerte zwei Ebenen an Ausführlichkeit, und es gibt viele Informationen, die normalerweise nicht nützlich sind.
git branch-list
Andererseits mit git branch-list
:
* master origin/master
Boom! Wir sehen sofort die nützlichsten Informationen: master
Tracks origin/master
.
Wenn wir dann wissen wollen, wann die Zweige auf dem neuesten Stand sind, verwenden wir -t
:
* master origin/master<
Interessiert es uns wirklich, ob wir 16592 Commits im Gegensatz zu 14386 Commits hinter sich haben? Nein, alles, was uns wichtig ist, ist, dass wir Bind sind, was das <
Symbol darstellt. Dies sind die gleichen Informationen, die Sie erhalten, wenn Sie __git_ps1
mit GIT_PS1_SHOWUPSTREAM=auto
verwenden.
Wenn Sie noch weitere Informationen wünschen, können Sie die Option -v
angeben:
* master [origin/master<] Linux 5.12
Wir erhalten die nützlichsten Informationen auf allen Ebenen (wen interessiert das, was die Objekt -ID ist?).
Sie können einige der Vorteile der git branch-list
von der offiziellen git branch
erhalten, wer auch immer Sie genau wissen müssen, welche Optionen aktiviert werden müssen.
Nehmen wir beispielsweise an, Sie haben mehrere Filialen, die die Dokumentation mit doc-
aktualisieren. Mit der offiziellen git branch
könnte man so etwas tun wie:
git branch --list doc-*
Dies funktioniert jedoch, 1) es funktioniert nicht, es sei denn, Sie geben --list
und 2) Sie den Stern ( *
) hinzufügen.
Andererseits mit git branch-list
:
git branch-list doc
Sie brauchen keine Option oder Asterisk. Es funktioniert einfach sofort.
Ein anderes Beispiel; Sie können eine nützliche Sortierung von Zweigen mit der folgenden Konfiguration aktivieren:
[branch]
sort = -committerdate
Aber mit git branch-list
müssen Sie nicht; Es ist standardmäßig sortiert.
Um die Leistung zu testen, werde ich ein echtes Repository verwenden: Linux. Ich erstelle in den letzten 10 Jahren 100 Zweige zu völlig zufälligen Punkten.
Nach dem Aufwärmen des Cache:
git branch --list --verbose
21.804 seconds
21.614 seconds
21.415 seconds
git branch-list
0.104 seconds
0.107 seconds
0.107 seconds
Gibt es überhaupt eine Frage?
git branch-list
ist die gleiche wie git branch --list
... aber viel besser .
Kopieren Sie das Skript überall in Ihrem $PATH
und machen Sie es ausführbar oder führen Sie sie aus make install
, die standardmäßig in Ihrem ~/bin/
verzeichnis/ verzeichnis installiert sind (stellen Sie sicher, dass es sich in Ihrem $PATH
befindet).