Podemos definir um padrão do Git para buscar todas as tags durante um pull remoto?

154

Atualmente, tenho uma configuração remota git como a seguinte:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*

Quando emito git pullno mestre de ramificação, todos os cabeçotes remotos são buscados em controles remotos / upstream e, em seguida, remotes / upstream / mestre são mesclados no mestre. As tags que podem ser alcançadas também são buscadas ao mesmo tempo, o que é muito conveniente.

git pullAlém disso, gostaria de buscar todas as tags do controle remoto, não apenas aquelas diretamente acessíveis pelas cabeças. Inicialmente, tentei configurar tagopt == --tags, mas achei que isso fazia com que apenas as tags fossem buscadas e, portanto, quebrava tudo. (Junio ​​até diz que é uma péssima confusão ).

Existe uma maneira de fazer git pullbuscar todas as tags remotas por padrão, além das cabeças remotas?

jleahy
fonte
1
Um lembrete para mim mesmo: verifique se você realmente inseriu a etiqueta primeiro (não funciona automaticamente): git push origin <tag_name>
Hafenkranich 26/04
Usar tagoptsolução não é mais uma configuração incorreta; a partir de 1.9 / 2.0 (primeiro trimestre de 2014), isso buscará todas as tags , além do que é normalmente buscado.
mgiuffrida

Respostas:

95

Você deve conseguir isso adicionando um refspec para tags à sua configuração local. Concretamente:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*
joshtkling
fonte
5
Ah, eu nunca percebi que você poderia ter várias linhas de busca, presumi que a última iria substituir. Isso é muito legal e explícito.
Jleahy 21/05
1
Cuidado ao usar isso com o git 2.21, consulte apple.stackexchange.com/questions/352404/…
Vadorequest
306

Um simples git fetch --tagsfuncionou para mim.

russoue
fonte
13
@Fizzix Talvez o título deva ser alterado para incluir "por padrão". Este post respondeu à minha pergunta.
precisa saber é o seguinte
2
Isto não funcionou para mim. Eu posso ver as tags com git ls-remote.
dangeroushobo
Isso pode não responder à pergunta exata, mas responde à pergunta no título e foi assim que a encontrei na pesquisa na web.
Hubert Grzeskowiak 29/08/19
68

A --forceopção é útil para atualizar as tags locais. Principalmente se você tiver tags flutuantes:

git fetch --tags --force

A opção git pull também tem as --forceopções e a descrição é a mesma:

Quando o git fetch é usado com <rbranch>: <lbranch> refspec, ele se recusa a atualizar a ramificação local <lbranch>, a menos que a ramificação remota <rbranch> buscada seja descendente de <lbranch>. Esta opção substitui essa verificação.

mas, de acordo com o documento de --no-tags:

Por padrão, as tags que apontam para os objetos baixados do repositório remoto são buscadas e armazenadas localmente.

Se essa instrução padrão não for uma restrição, você também poderá tentar

git pull --force
yucer
fonte
2
git pull --forcenão incluigit fetch --tags --force
Geniy
21

Para mim, o seguinte parecia funcionar.

git pull --tags
Vasantha Ganesh K
fonte
Buscando apenas tags, você provavelmente quis dizer: `git fetch --tags '
Yuseferi 25/06
Já existe uma resposta com git fetch --tags. Eu queria dar uma resposta alternativa. pull = buscar + mesclar. Então, a busca também acontece.
Vasantha Ganesh K
13

É simples. Faça um

git fetch --all

amulamul
fonte
1

Eu uso isso com o magit no kernel.org

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
evento
fonte