La version actuelle de git branch --list
fonctionne principalement, mais elle est lente et lourde. Bien que cela puisse facilement être fixé dans Git lui-même, chaque patch qui essaie d'améliorer l'interface utilisateur est de facto rejeté.
Une git branch-list
de commande externe est la solution.
Pourquoi git branch-list
elle meilleure?
git branch --list
Dites que vous avez une branche master
qui suit une branche distante, mais ce n'est pas toujours à jour (nous utiliserons le référentiel de Linux).
Dans ce cas, le responsable git branch
le montrera:
* master
Cela ne fournit pas beaucoup d'informations. Si vous utilisez l'option --verbose
, vous obtenez:
* master 9f4ad9e425a1 [behind 16592] Linux 5.12
Ok, nous sommes en retard d'ici 16592, mais derrière quoi? Nous pouvons deviner du titre de validation, mais ce n'est pas vraiment clair.
Si nous utilisons --verbose --verbose
nous obtenons:
* master 9f4ad9e425a1 [origin/master: behind 16592] Linux 5.12
Enfin, nous avons des informations utiles, mais il a fallu deux niveaux de verbosité, et il y a beaucoup d'informations qui ne sont généralement pas utiles.
git branch-list
D'un autre côté, avec git branch-list
:
* master origin/master
Boom! Tout de suite, nous voyons les informations les plus utiles: master
Tracks origin/master
.
Ensuite, si nous voulons savoir quand les branches sont à jour, nous utilisons -t
:
* master origin/master<
Nous soucions-nous vraiment si nous sommes 16592 comme des engagements, par opposition à 14386 engagements derrière? Non, tout ce que nous nous soucions, c'est que nous sommes Beind, ce que le <
symbole représente. Il s'agit des mêmes informations que vous obtenez lorsque vous utilisez __git_ps1
avec GIT_PS1_SHOWUPSTREAM=auto
.
Si vous souhaitez encore plus d'informations, vous pouvez spécifier l'option -v
:
* master [origin/master<] Linux 5.12
Nous obtenons toutes les informations les plus utiles à tous les niveaux (qui se soucie de l'identification de l'objet?).
Vous pouvez obtenir certains des avantages de git branch-list
de la git branch
officielle, qui que ce soit, vous devez savoir spécifiquement quelles options à permettre.
Par exemple, disons que vous avez plusieurs branches qui mettent à jour la documentation préfixée avec doc-
. Avec la git branch
vous pourriez faire quelque chose comme:
git branch --list doc-*
Cela fonctionne cependant, 1) cela ne fonctionne que si vous spécifiez --list
et 2) vous devez ajouter l'astérisque ( *
).
D'un autre côté avec git branch-list
:
git branch-list doc
Vous n'avez pas besoin d'option, ni d'astérisque. Cela fonctionne tout de suite.
Un autre exemple; Vous pouvez activer un tri utile de branches avec la configuration suivante:
[branch]
sort = -committerdate
Mais avec git branch-list
vous n'avez pas besoin de le faire; il est trié par défaut.
Afin de tester les performances, j'utiliserai un vrai référentiel: Linux. Je crée 100 branches à des points complètement aléatoires au cours des 10 dernières années.
Après avoir réchauffé le 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
Y a-t-il même une question?
git branch-list
est la même que git branch --list
... mais beaucoup mieux .
Copiez le script n'importe où dans votre $PATH
et faites-le exécutable, ou exécutez make install
qui l'installera par défaut sur votre ~/bin/
répertoire (assurez-vous qu'il se trouve dans votre $PATH
).