Nota: a partir do git 1.9 / 2.0 (primeiro trimestre de 2014) , git fetch --tags
busca tags além daquelas que são buscadas pela mesma linha de comando sem a opção
Veja commit c5a84e9 de Michael Haggerty (mhagger) :
Anteriormente, a --tags
opção " " da busca era considerada equivalente à especificação do refspec
refs/tags/*:refs/tags/*
na linha de comando; em particular, fez com que a remote.<name>.refspec
configuração fosse ignorada.
Mas não é muito útil buscar tags sem também buscar outras referências, ao passo que é bastante útil poder buscar tags além de outras referências.
Portanto, altere a semântica desta opção para fazer a última.
Se um usuário deseja buscar apenas tags, ainda é possível especificar um refspec explícito:
git fetch <remote> 'refs/tags/*:refs/tags/*'
Observe que a documentação anterior à 1.8.0.3 era ambígua sobre esse aspecto " fetch --tags
" do comportamento.
A confirmação f0cb2f1 ( 14-12-2012 ) fetch --tags
fez com que a documentação correspondesse ao comportamento antigo.
Essa confirmação altera a documentação para corresponder ao novo comportamento (consulteDocumentation/fetch-options.txt
).
Solicite que todas as tags sejam buscadas no controle remoto , além do que estiver sendo buscado .
Como o Git 2.5 (segundo trimestre de 2015) git pull --tags
é mais robusto:
Ver commit 19d122b por Paul Tan ( pyokagan
) , 13 de maio de 2015.
(Mesclado por Junio C Hamano - gitster
- no commit cc77b99 , 22 de maio de 2015)
pull
: remover --tags
erro no caso de candidatos sem mesclagem
Como o 441ed41 (" git pull --tags
": erro com uma mensagem melhor., 28-12-2007, Git 1.5.4+), git pull --tags
imprimiria uma mensagem de erro diferente se
git-fetch
não retornasse nenhum candidato de mesclagem:
It doesn't make sense to pull all tags; you probably meant:
git fetch --tags
Isso ocorre porque, naquele momento, git-fetch --tags
substituiria quaisquer refspecs configurados e, portanto, não haveria candidatos à mesclagem. A mensagem de erro foi introduzida para evitar confusão.
No entanto, como c5a84e9 ( fetch --tags
: buscar tags além de
outras coisas, 2013-10-30, Git 1.9.0+), buscaria git fetch --tags
tags além de quaisquer refspecs configurados.
Portanto, se ocorrer qualquer situação de candidatos não mesclados, não é porque --tags
foi definido. Como tal, esta mensagem de erro especial agora é irrelevante.
Para evitar confusão, remova essa mensagem de erro.
Com o Git 2.11+ (quarto trimestre de 2016) git fetch
é mais rápido.
Veja commit 5827a03 (13 de outubro de 2016) por Jeff King ( peff
) .
(Mesclado por Junio C Hamano - gitster
- na confirmação 9fcd144 , 26 de outubro de 2016)
fetch
: use "quick" has_sha1_file
para seguir as tags
Ao buscar em um controle remoto que possui muitas tags que são irrelevantes para as ramificações que seguimos, perdemos muitos ciclos ao verificar se o objeto apontado por uma tag (que não vamos buscar!) Existe em nosso repositório com muito cuidado.
Este patch ensina a buscar o uso do HAS_SHA1_QUICK para sacrificar a precisão pela velocidade, nos casos em que podemos ser atrevidos com uma reembalagem simultânea.
Aqui estão os resultados do script perf incluído, que configura uma situação semelhante à descrita acima:
Test HEAD^ HEAD
----------------------------------------------------------
5550.4: fetch 11.21(10.42+0.78) 0.08(0.04+0.02) -99.3%
Isso se aplica apenas a uma situação em que:
- Você tem muitos pacotes no lado do cliente para ficar
reprepare_packed_git()
caros (a parte mais cara é encontrar duplicatas em uma lista não classificada, que atualmente é quadrática).
- Você precisa de um grande número de referências de tags no lado do servidor candidatas ao acompanhamento automático (ou seja, que o cliente não possui). Cada um deles dispara uma releitura do diretório do pacote.
- Em circunstâncias normais, o cliente seguiria automaticamente essas tags e, após uma grande busca, (2) não seria mais verdadeiro.
Mas se essas tags apontarem para um histórico desconectado do que o cliente busca, ele nunca seguirá automaticamente, e esses candidatos terão um impacto sobre cada busca.
O Git 2.21 (fevereiro de 2019) parece ter introduzido uma regressão quando a configuração nãoremote.origin.fetch
é a padrão ( '+refs/heads/*:refs/remotes/origin/*'
)
fatal: multiple updates for ref 'refs/tags/v1.0.0' not allowed
O Git 2.24 (quarto trimestre de 2019) adiciona outra otimização.
Veja commit b7e2d8b (15 set 2019) de Masaya Suzuki ( draftcode
) .
(Incorporado por Junio C Hamano - gitster
- in commit 1d8b0df , 07 out 2019)
fetch
: use oidset
para manter os OIDs desejados para uma pesquisa mais rápida
Durante git fetch
, o cliente verifica se os OIDs das tags anunciadas já estão no conjunto de OIDs da solicitação de busca.
Essa verificação é feita em uma varredura linear.
Para um repositório com muitas referências, a repetição dessa verificação leva mais de 15 minutos.
Para acelerar isso, crie um oid_set
para OIDs de outros árbitros.