Possiamo impostare un predefinito Git per recuperare tutti i tag durante un pull remoto?


154

Al momento ho una configurazione remota git come la seguente:

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

Quando emetto git pullsul master principale, tutte le testine remote vengono recuperate in telecomandi / upstream, quindi i telecomandi / upstream / master vengono uniti in master. Tutti i tag che possono essere raggiunti vengono anche recuperati allo stesso tempo, il che è molto conveniente.

Vorrei git pullinoltre recuperare tutti i tag dal telecomando, non solo quelli che sono direttamente raggiungibili dalle teste. Inizialmente ho provato a impostare tagopt == --tags, ma ho scoperto che questo causava solo il recupero di tag e quindi ha rotto tutto. (Junio ​​dice anche che è un'orrenda confusione ).

C'è un modo per git pullrecuperare tutti i tag remoti per impostazione predefinita, oltre alle testine remote?


1
Un promemoria per me stesso: assicurati di aver prima premuto il tag (non funziona automaticamente): git push origin <tag_name>
Hafenkranich

L'uso della tagoptsoluzione non è più una configurazione errata; a partire dall'1.9 / 2.0 (1 ° trimestre 2014) verranno recuperati tutti i tag oltre a quelli normalmente recuperati.
Mgiuffrida,

Risposte:


95

Dovresti riuscire a farlo aggiungendo un refspec per i tag alla tua configurazione locale. In concreto:

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

5
Aha, non ho mai capito che potevi avere più linee di recupero, immaginavo che l'ultimo avrebbe semplicemente ignorato. È molto carino ed esplicito.
jleahy,


306

Un semplice ha git fetch --tagsfunzionato per me.


13
@Fizzix Forse il titolo dovrebbe essere modificato per includere "di default". Questo post ha risposto alla mia domanda.
Matt Kneiser,

2
Questo non ha funzionato per me. Posso vedere i tag con git ls-remote.
dangeroushobo,

Questo potrebbe non rispondere alla domanda esatta, ma risponde alla domanda nel titolo ed è così che l'ho trovata attraverso la ricerca sul web.
Hubert Grzeskowiak,

68

L' --forceopzione è utile per aggiornare i tag locali. Principalmente se hai tag mobili:

git fetch --tags --force

L'opzione git pull ha anche le --forceopzioni e la descrizione è la stessa:

Quando git fetch viene utilizzato con <rbranch>: <lbranch> refspec, rifiuta di aggiornare il ramo locale <lbranch> a meno che il ramo remoto <rbranch> che recupera non sia un discendente di <lbranch>. Questa opzione ignora tale controllo.

ma, secondo il documento di --no-tags:

Per impostazione predefinita, i tag che puntano a oggetti scaricati dal repository remoto vengono recuperati e archiviati localmente.

Se tale istruzione predefinita non è una restrizione, puoi anche provare

git pull --force

2
git pull --forcenon includegit fetch --tags --force
Geniy,

21

Per me il seguente sembrava funzionare.

git pull --tags

Recuperando solo tag, probabilmente intendevi: `git fetch --tags`
Yuseferi

C'è già una risposta con git fetch --tags. Volevo dare una risposta alternativa. pull = fetch + merge. Quindi succede anche il recupero.
Vasantha Ganesh K


1

Lo uso con magit su kernel.org

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.