git fetch <gitserver> <remotetag>:<localtag>
\===================================
Das habe ich gerade getan. Zuerst habe ich mich vergewissert, dass ich die Schreibweise des Tag-Namens kenne.
git ls-remote --tags gitserver; : or origin, whatever your remote is called
Dadurch erhielt ich eine Liste von Tags auf meinem Git-Server, aus der ich auswählen konnte. Der ursprüngliche Poster kannte den Namen seines Tags bereits, so dass dieser Schritt nicht für jeden notwendig ist. Die Ausgabe sah wie folgt aus, obwohl die echte Liste länger war.
8acb6864d10caa9baf25cc1e4857371efb01f7cd refs/tags/v5.2.2.2
f4ba9d79e3d760f1990c2117187b5010e92e1ea2 refs/tags/v5.2.3.1
8dd05466201b51fcaf4ca85897347d82fcb29518 refs/tags/Fix_109
9b5087090d9077c10ba22d99d5ce90d8a45c50a3 refs/tags/Fix_110
Ich wählte den gewünschten Tag aus und holte diesen und nichts weiter wie folgt ab.
git fetch gitserver Fix_110
Dann habe ich diese auf meinem lokalen Rechner mit einem Tag versehen und meinem Tag denselben Namen gegeben.
git tag Fix_110 FETCH_HEAD
Ich wollte das entfernte Repository nicht klonen, wie es andere Leute vorgeschlagen haben, da das Projekt, an dem ich arbeite, groß ist und ich in einer sauberen Umgebung entwickeln möchte. Meiner Meinung nach ist dies näher an der ursprünglichen Frage "Ich versuche herauszufinden, wie man einen BESTIMMTEN TAG herunterlädt" als die Lösung, die vorschlägt, das gesamte Repository zu klonen. Ich sehe nicht ein, warum jemand eine Kopie des Quellcodes von Windows NT und Windows 8.1 haben sollte, wenn er sich den Quellcode von DOS 0.1 (zum Beispiel) ansehen möchte.
Ich wollte auch nicht, wie von anderen vorgeschlagen, CHECKOUT verwenden. Ich hatte einen Zweig ausgecheckt und wollte diesen nicht beeinträchtigen. Meine Absicht war es, die Software zu holen, die ich wollte, damit ich mir etwas herauspicken und in meine Entwicklung einbringen konnte.
Es gibt wahrscheinlich eine Möglichkeit, das Tag selbst zu holen und nicht nur eine Kopie des Commits, der getaggt wurde. Ich musste den geholten Commit selbst taggen. EDIT: Ah ja, jetzt habe ich es gefunden.
git fetch gitserver Fix_110:Fix_110
Wo Sie den Doppelpunkt sehen, heißt es remote-name:local-name und hier sind es die Tag-Namen. Dies läuft, ohne den Arbeitsbaum usw. zu stören. Es scheint nur Dinge vom entfernten auf den lokalen Rechner zu kopieren, damit Sie Ihre eigene Kopie haben.
git fetch gitserver --dry-run Fix_110:Fix_110
mit der hinzugefügten Option --dry-run können Sie sich ansehen, was der Befehl tun würde, wenn Sie überprüfen wollen, ob es das ist, was Sie wollen. Ich schätze, eine einfache
git fetch gitserver remotetag:localtag
ist die wahre Antwort.
\=
Eine separate Anmerkung zu Tags ... Wenn ich etwas Neues beginne, markiere ich normalerweise das leere Repository nach git init, da
git rebase -i XXXXX
erfordert ein Commit, und es stellt sich die Frage: "Wie bindet man Änderungen, die die erste Softwareänderung beinhalten, wieder ein?" Wenn ich also mit der Arbeit beginne, mache ich
git init
touch .gitignore
[then add it and commit it, and finally]
git tag EMPTY
d.h. einen Commit vor meiner ersten echten Änderung erstellen und dann später
git rebase -i EMPTY
wenn ich meine gesamte Arbeit umgestalten möchte, einschließlich der ersten Änderung .
11 Stimmen
Ich entwickle auf einem völlig anderen Projektarchiv als die Produktion, so dass meine Produktion keine Tags kannte, als ich versuchte, git checkout zu verwenden. Die Lösung war, "git pull --tags" zu verwenden und dann git checkout zu benutzen.
13 Stimmen
"git fetch --tags" funktioniert auch
18 Stimmen
Um zu vermeiden, dass das gesamte Repository geklont und dann zu einem Tag gewechselt wird, können Sie direkt eine
clone -b "Tagged release 1.1.5" http://git.abc.net/git/abs.git my_abc
. Dies funktioniert natürlich nur, wenn Sie keine Verzweigung mit demselben Namen haben (je nach Ihrer Methodik kann dies nie der Fall sein).3 Stimmen
@RedGlyph Danke, ich werde es versuchen. Sonst können wir das auch so machen.
git checkout -b new-branch tag-name
. Klonen Sie jetzt Ihren neuen Zweig. Wann immer wir wollen, können wir den neuen Zweig löschen.