Können wir einen Git-Standard festlegen, um alle Tags während eines Remote-Pulls abzurufen?

153

Ich habe derzeit ein Git-Remote-Setup wie das folgende:

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

Wenn ich git pullauf dem Zweigmaster ausstelle , werden alle Remote-Köpfe in Fernbedienungen / Upstream abgerufen, dann werden Fernbedienungen / Upstream / Master in Master zusammengeführt. Alle Tags, die erreicht werden können, werden gleichzeitig abgerufen, was sehr praktisch ist.

Ich möchte git pullzusätzlich alle Tags von der Fernbedienung abrufen, nicht nur diejenigen, die direkt von den Köpfen aus erreichbar sind. Ich habe ursprünglich versucht, die Einstellungen vorzunehmen tagopt == --tags, aber festgestellt, dass nur Tags abgerufen wurden und somit alles kaputt ging. (Junio ​​sagt sogar, dass das eine schreckliche Fehlkonfiguration ist ).

Gibt es eine Möglichkeit git pull, zusätzlich zu den Remote-Köpfen standardmäßig alle Remote-Tags abzurufen?

jleahy
quelle
1
Eine Erinnerung an mich selbst: Stellen Sie sicher, dass Sie das Tag tatsächlich zuerst verschoben haben (funktioniert nicht automatisch): git push origin <tag_name>
Hafenkranich
Die Verwendung einer tagoptLösung ist keine Fehlkonfiguration mehr. Ab 1.9 / 2.0 (1. Quartal 2014) werden alle Tags zusätzlich zu den normalerweise abgerufenen Tags abgerufen.
mgiuffrida

Antworten:

95

Sie sollten dies erreichen können, indem Sie Ihrer lokalen Konfiguration eine Referenz für Tags hinzufügen. Konkret:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*
joshtkling
quelle
5
Aha, ich hätte nie gedacht, dass Sie mehrere Abrufzeilen haben könnten. Ich nahm an, dass die letzte nur überschreiben würde. Das ist sehr nett und explizit.
Jleahy
1
Passen
Vadorequest
306

Ein einfaches git fetch --tagshat für mich funktioniert.

russoue
quelle
13
@Fizzix Vielleicht sollte der Titel so geändert werden, dass er "standardmäßig" enthält. Dieser Beitrag hat meine Frage beantwortet.
Matt Kneiser
2
Das hat bei mir nicht funktioniert. Ich kann die Tags mit sehen git ls-remote.
gefährlichhobo
Dies beantwortet möglicherweise nicht die genaue Frage, aber es beantwortet die Frage im Titel und so habe ich sie über die Websuche gefunden.
Hubert Grzeskowiak
67

Die --forceOption ist nützlich, um die lokalen Tags zu aktualisieren. Hauptsächlich wenn Sie schwebende Tags haben:

git fetch --tags --force

Die Git Pull Option hat auch die --forceOptionen und die Beschreibung ist dieselbe:

Wenn git fetch mit <rbranch>: <lbranch> refspec verwendet wird, wird die Aktualisierung des lokalen Zweigs <lbranch> abgelehnt, es sei denn, der entfernte Zweig <rbranch>, der abgerufen wird, ist ein Nachkomme von <lbranch>. Diese Option überschreibt diese Prüfung.

aber nach dem Dokument von --no-tags:

Standardmäßig werden Tags, die auf Objekte verweisen, die aus dem Remote-Repository heruntergeladen wurden, abgerufen und lokal gespeichert.

Wenn diese Standardanweisung keine Einschränkung darstellt, können Sie es auch versuchen

git pull --force
yucer
quelle
2
git pull --forcenicht enthaltengit fetch --tags --force
Geniy
21

Für mich schien folgendes zu funktionieren.

git pull --tags
Vasantha Ganesh K.
quelle
Sie haben wahrscheinlich nur Tags abgerufen und damit gemeint: `git fetch --tags`
Yuseferi
Es gibt bereits eine Antwort mit git fetch --tags. Ich wollte eine alternative Antwort geben. pull = fetch + merge. Also passiert auch holen.
Vasantha Ganesh K
13

Es ist einfach. Mach a

git fetch --all

Amulamul
quelle
1

Ich benutze dies mit magit auf kernel.org

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