Nota: a partir do git 1.9 / 2.0 (primeiro trimestre de 2014) , git fetch --tagsbusca 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 --tagsopçã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>.refspecconfiguraçã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 --tagsfez 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 --tagsimprimiria uma mensagem de erro diferente se
git-fetchnã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 --tagssubstituiria 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 --tagstags além de quaisquer refspecs configurados.
Portanto, se ocorrer qualquer situação de candidatos não mesclados, não é porque --tagsfoi 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_filepara 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 oidsetpara 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_setpara OIDs de outros árbitros.