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-filterAPIs ' '
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-filterbiblioteca " ".
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 branchsuporta 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 -rsinalizador faz com que ele aliste ramificações remotas em vez de ramificações locais.
Com o Git 2.27 (segundo trimestre de 2020) ",git branchfor-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 valuecampos " " numéricos como "taggerdate ", aplicamos o fallback. E é por isso que nosso teste de classificação múltipla perdeu isso: ele é usado taggeremailcomo 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_sortingelemento 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".