A versão atual do git branch --list
funciona principalmente, mas é lenta e pesada. Embora isso possa ser facilmente corrigido no próprio git, todo patch que tenta melhorar a interface do usuário é de fato rejeitado.
Uma git branch-list
de comando externo é a solução.
Por que git branch-list
é melhor?
git branch --list
Digamos que você tenha uma filial master
que rastreia uma filial remota, mas nem sempre está atualizada (usaremos o repositório do Linux).
Nesse caso, git branch
oficial mostrará isso:
* master
Isso não fornece muita informação. Se você usar a opção --verbose
, você recebe:
* master 9f4ad9e425a1 [behind 16592] Linux 5.12
Ok, estamos atrasados por 16592, mas por trás do quê? Podemos adivinhar a partir do título de confirmação, mas não está muito claro.
Se usarmos --verbose --verbose
obtemos:
* master 9f4ad9e425a1 [origin/master: behind 16592] Linux 5.12
Finalmente, temos algumas informações úteis, mas foram necessários dois níveis de verbosidade, e há muitas informações que normalmente não são úteis.
git branch-list
Por outro lado, com git branch-list
:
* master origin/master
BOOM! Imediatamente vemos as informações mais úteis: master
rastreia origin/master
.
Então, se queremos saber quando as filiais estão atualizadas, usamos -t
:
* master origin/master<
Nós realmente nos importamos se somos 16592 compromissos para trás, em oposição a 14386 compromissos para trás? Não, tudo o que nos preocupamos é que somos Beind, que o <
símbolo representa. Esta é a mesma informação que você obtém quando usa __git_ps1
com GIT_PS1_SHOWUPSTREAM=auto
.
Se você deseja ainda mais informações, pode especificar a opção -v
:
* master [origin/master<] Linux 5.12
Temos todas as informações mais úteis em todos os níveis (quem se importa com o que é o ID do objeto?).
Você pode obter algumas das vantagens da git branch-list
da git branch
, quem quer que seja, você precisa saber especificamente quais opções a fim de ativar.
Por exemplo, digamos que você tenha várias filiais que atualizam a documentação prefixada com doc-
. Com a git branch
você pode fazer algo como:
git branch --list doc-*
Isso funciona, no entanto, 1) não funciona a menos que você especifique --list
2) você precisa adicionar o asterisco ( *
).
Por outro lado, com git branch-list
:
git branch-list doc
Você não precisa de nenhuma opção, nem do asterisco. Apenas funciona imediatamente.
Outro exemplo; Você pode ativar uma classificação útil de galhos com a seguinte configuração:
[branch]
sort = -committerdate
Mas com git branch-list
você não precisa; É classificado por padrão.
Para testar o desempenho, usarei um repositório real: Linux. Eu crio 100 filiais em pontos completamente aleatórios nos últimos 10 anos.
Depois de aquecer o 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
Existe até uma pergunta?
git branch-list
é a mesma que git branch --list
... mas muito melhor .
Copie o script em qualquer lugar do seu $PATH
e faça com que ele seja executável, ou execute make install
que o instalará por padrão no seu diretório ~/bin/
(verifique se está no seu $PATH
).