O git 2.7 (quarto trimestre de 2015) introduzirá a classificação de ramificação usando diretamente git branch
:
Consulte commit aa3bc55 , commit aedcb7d , commit 1511b22 , commit f65f139 , ... (23 de setembro de 2015), commit aedcb7d , commit 1511b22 , commit ca41799 (24 set 2015) e confirmar f65f139 , ... (23 de setembro de 2015) por Karthik Nayak ( KarthikNayak
) .
(Mesclado por Junio C Hamano - gitster
- no commit 7f11b48 , 15 de outubro de 2015)
Em particular, confirme aedcb7d :
branch.c
: use ref-filter
APIs ' '
Crie APIs ' branch.c
' use ' ref-filter
' para iterar através da classificação refs. Isso remove a maior parte do código usado em " branch.c
" substituí-lo por chamadas para a ref-filter
biblioteca " ".
Ele adiciona a opção--sort=<key>
:
Classifique com base na chave fornecida.
Prefixo -
para classificar em ordem decrescente do valor.
Você pode usar a --sort=<key>
opção várias vezes; nesse caso, a última chave se torna a chave primária.
As chaves suportadas são as mesmas que as degit for-each-ref
.
O padrão da ordem de classificação é a classificação com base no nome completo da ref (incluindo o refs/...
prefixo). Isso lista primeiro o HEAD desanexado (se presente), depois as ramificações locais e, finalmente, as ramificações de rastreamento remoto.
Aqui:
git branch --sort=-committerdate
Ou (veja abaixo com Git 2.19)
# if you are sure to /always/ want to see branches ordered by commits:
git config --global branch.sort -committerdate
git branch
Veja também commit 9e46833 (30 de outubro de 2015) por Karthik Nayak ( KarthikNayak
) .
Ajudado por: Junio C Hamano ( gitster
) .
(Mesclado por Junio C Hamano - gitster
- na confirmação 415095f , 03 de novembro de 2015)
Ao classificar de acordo com valores numéricos (por exemplo, --sort=objectsize
), não há comparação de fallback quando os dois refs mantêm o mesmo valor. Isso pode causar resultados inesperados (isto é, a ordem de listar referências com valores iguais não pode ser pré-determinada), como apontado por Johannes Sixt ( $ gmane / 280117 ).
Portanto, faça o fallback da comparação alfabética com base no nome da ref sempre que o outro critério for igual .
$ git branch --sort=objectsize
* (HEAD detached from fromtag)
branch-two
branch-one
master
Com o Git 2.19, a ordem de classificação pode ser definida por padrão.
git branch
suporta uma configuração branch.sort
, como git tag
, que já tinha uma configuração tag.sort
.
Veja commit 560ae1c (16 ago 2018) por Samuel Maftoul (``) .
(Mesclado por Junio C Hamano - gitster
- in commit d89db6f , 27 de agosto de 2018)
branch.sort:
Essa variável controla a ordem de classificação das ramificações quando exibida por git-branch
.
Sem a --sort=<value>
opção " " fornecida, o valor dessa variável será usado como padrão.
Para listar ramificações remotas, use git branch -r --sort=objectsize
. O -r
sinalizador faz com que ele aliste ramificações remotas em vez de ramificações locais.
Com o Git 2.27 (segundo trimestre de 2020) ",git branch
for-each-ref
variantes " e outras " " aceitaram várias --sort=<key>
opções na ordem crescente de precedência, mas houve algumas falhas "--ignore-case
" falhas no manuseio e empate com o refname, que foram corrigidos.
Consulte commit 7c5045f , commit 76f9e56 (03 de maio de 2020) por Jeff King ( peff
) .
(Mesclado por Junio C Hamano - gitster
- no commit 6de1630 , 08 de maio de 2020)
ref-filter
: aplicar classificação refname de fallback somente após todas as classificações de usuário
Assinado por: Jeff King
Confirmar 9e468334b4 (" ref-filter
: fallback na comparação alfabética", 30/10/2015, Git v2.7.0-rc0 - mesclagem listada no lote # 10 ) ensinou a classificação do ref-filter a fallback na comparação de refnames.
Mas fez isso no nível errado, substituindo o resultado da comparação por um único "--sort
" chave do usuário, em vez de depois que todas as chaves de classificação foram esgotadas.
Isso funcionou corretamente para um único "--sort
" opção, mas não para várias.
Quebraríamos qualquer vínculo na primeira chave com o refname e nunca avaliaríamos a segunda chave.
Para tornar as coisas ainda mais interessantes, aplicamos esse fallback às vezes!
Para um campo como " taggeremail
" que requer uma comparação de cadeias, retornaríamos realmente o resultado strcmp()
, mesmo que fosse 0.
Mas para value
campos " " numéricos como "taggerdate
", aplicamos o fallback. E é por isso que nosso teste de classificação múltipla perdeu isso: ele é usado taggeremail
como comparação principal.
Então, vamos começar adicionando um teste muito mais rigoroso. Teremos um conjunto de confirmações expressando todas as combinações de dois e-mails, datas e nomes de nomes de marcadores. Em seguida, podemos confirmar que nossa classificação é aplicada com a precedência correta e pressionaremos os comparadores de string e valor.
Isso mostra o erro, e a correção é simples: mover o fallback para a compare_refs()
função externa , afinalref_sorting
teclas estiverem esgotadas.
Observe que na função externa não temos uma "ignore_case"
bandeira, pois faz parte de cada ref_sorting
elemento individual . É discutível o que esse fallback deve fazer, pois não usamos as chaves do usuário para corresponder.
Mas até agora tentamos respeitar essa bandeira, então a coisa menos invasiva é tentar continuar fazendo isso.
Como todos os chamadores no código atual definem o sinalizador para todas as teclas ou para nenhum, podemos simplesmente puxar o sinalizador da primeira tecla. Em um mundo hipotético em que o usuário realmente pode inverter a distinção entre maiúsculas e minúsculas de chaves separadamente, podemos estender o código para distinguir esse caso de um cobertor " --ignore-case
".