2117 Stimmen

Herunterladen eines bestimmten Tags mit Git

Ich versuche herauszufinden, wie ich ein bestimmtes Tag eines Git-Repositorys herunterladen kann - es ist eine Version hinter der aktuellen Version.

Ich habe gesehen, dass es einen Tag für die vorherige Version auf der Git-Webseite gab, mit einem Objektnamen von einer langen hexadezimalen Zahl.

Der Versionsname lautet jedoch " Tagged release 1.1.5 ", heißt es auf der Website.

Ich habe einen Befehl wie diesen ausprobiert (mit geänderten Namen):

git clone http://git.abc.net/git/abc.git my_abc

Und ich habe etwas erhalten - ein Verzeichnis, eine Reihe von Unterverzeichnissen usw.

Wenn es das gesamte Repository ist, wie komme ich dann an die gesuchte Version? Wenn nicht, wie kann ich diese spezielle Version herunterladen?

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).

3054voto

besen Punkte 31604
$ git clone

wird Ihnen das gesamte Repository zur Verfügung stellen.

Nach dem Klonen können Sie die Tags mit $ git tag -l und dann einen bestimmten Tag auschecken:

$ git checkout tags/<tag_name>

Noch besser ist es, wenn Sie auschecken und einen Zweig erstellen (sonst befinden Sie sich in einem Zweig, der nach der Revisionsnummer von tag benannt ist):

$ git checkout tags/<tag_name> -b <branch_name>

16 Stimmen

Ja. Git unterscheidet sich in dieser Hinsicht von Subversion. Ein svn-Tag kopiert die Dateien im Grunde in einen neuen Ordner, so dass man mit svn ein bestimmtes Bündel von Dateien auschecken kann, während git-Tags einfach Verweise auf bestimmte Revisionen sind.

0 Stimmen

@Renato, nach git checkout <tag_name>, kann auf dem gleichen arbeiten und zu ihm übertragen, nur behandeln <tag_name> als <branch_name> ? Ich dachte <tag_name> ist für einen speziellen Commit (als Release) gedacht, aber das als Branch zu behandeln ist verwirrend und das Gegenteil richtig?

5 Stimmen

Was ist, wenn ein Zweig und ein Tag denselben Namen haben? Wenn Sie einfach "git checkout <name>" sagen, heißt es "warning: refname '<name>' is ambiguous. Zu Zweig '<Name>' gewechselt" -- Wie kann man dem Programm sagen, dass es stattdessen zu dem Tag wechseln soll?

446voto

Toni Punkte 4367
git clone --branch my_abc http://git.abc.net/git/abc.git

Wird die Repo klonen und lassen Sie auf den Tag, den Sie interessiert sind.

Dokumentation für 1.8.0 von Git-Klon Staaten.

--branch kann auch Tags annehmen und trennt den HEAD an diesem Commit im resultierenden Repository.

10 Stimmen

Dies funktioniert (zumindest jetzt) für Tags, obwohl Sie in einem abgetrennten HEAD-Status enden.

81 Stimmen

Zu Ihrer Information: Geben Sie auch an --depth 1 um das Herunterladen von nicht aktuellen Commits zu vermeiden.

5 Stimmen

Dies ist in der Tat pas Arbeit mit Tags. Nur Zweige. Bearbeiten: Es sieht so aus, als ob nur neuere Versionen von Git dies unterstützen.

229voto

Yuan HOng Punkte 2127

Um nur ein bestimmtes Tag für den Einsatz zu prüfen, verwende ich z. B.:

git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git

Dies scheint der schnellste Weg zu sein, Code aus einem entfernten Repository auszuchecken, wenn man nur an dem neuesten Code interessiert ist und nicht an einem kompletten Repository. In dieser Hinsicht ähnelt er dem Befehl "svn co".

Anmerkung: Per das Git-Handbuch , vorbei am --depth Flagge impliziert --single-branch standardmäßig.

--tiefe

Erzeugt einen flachen Klon mit einer auf die angegebene Anzahl von Übertragungen verkürzten Historie. Impliziert --single-branch, es sei denn, --no-single-branch wird angegeben, um die Historien in der Nähe der Spitzen aller Zweige zu holen. Wenn Sie Submodule oberflächlich klonen wollen, übergeben Sie auch --shallow-submodules.

16 Stimmen

--depth n implica --single-branch . Sie brauchen nicht beides.

4 Stimmen

@RyanNerd +1 :) Noch ein Hinweis für alle, die die letzte Stunde damit verbracht haben, dies herauszufinden: Geben Sie den Namen der Verzweigung/des Tags nicht in Anführungszeichen ein, wenn Sie diesen Befehl unter Windows ausführen. Die Anführungszeichen werden bei der Suche nach der Verzweigung/Marke wortwörtlich übernommen

1 Stimmen

Ich versuche, als Teil eines Skripts für die Bereitstellung zu klonen. Gibt es eine Möglichkeit, die Meldung "abgetrennter Kopf" auszublenden? Ich habe es versucht: git clone -b 'v2.0' --quiet --depth 1 https://github.com/git/git.git Das funktioniert aber nicht.

99voto

grossvogel Punkte 6593

Ich bin kein Git-Experte, aber ich denke, das sollte funktionieren:

git clone http://git.abc.net/git/abc.git
cd abc
git checkout my_abc 

OR

git clone http://git.abc.net/git/abc.git
cd abc
git checkout -b new_branch my_abc

Bei der zweiten Variante wird ein neuer Zweig auf der Grundlage des Tags erstellt, wodurch ein "abgetrennter HEAD" vermieden werden kann. (git-checkout Handbuch)

Jedes Git-Projektarchiv enthält die gesamte Revisionshistorie. Wenn Sie das Projektarchiv klonen, haben Sie Zugriff auf den letzten Commit und alles, was davor war, einschließlich des Tags, nach dem Sie suchen.

4 Stimmen

Vielen Dank. Ich musste verwenden git checkout -b b1.5.0 v1.5.0 beim Auschecken einer Version innerhalb eines 'gh-pages'-Zweigs, um erfolgreich auf Github Pages zu pushen. Diese Gist, die ich geschrieben habe, könnte anderen helfen: branch/tag/submodules... gist.github.com/1064750

4 Stimmen

Ich glaube nicht, dass dies vollständig korrekt ist (z. B. beim Einfügen in Terminal), da man cd in abc/ bevor Sie einen Zweig auschecken können

0 Stimmen

@StevenLu Sie haben natürlich recht. Ich wollte eher Konzepte als Cut-and-Paste, aber es könnte auch so genau wie möglich sein. Ich habe die cd .

84voto

Chris J Punkte 9032

Sie können git archive verwenden, um einen Tar-Ball für ein bestimmtes Tag oder eine Commit-ID herunterzuladen:

git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar

Sie können auch ein Zip-Archiv eines Tags exportieren.

  1. Tags auflisten:

    git tag
    
    0.0.1
    0.1.0
  2. Exportieren Sie einen Tag:

    git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0
  3. Anmerkungen:

    • Sie müssen das Format nicht angeben. Es wird vom Namen der Ausgabedatei übernommen.
    • Durch die Angabe des Präfixes wird Ihr Code in ein Verzeichnis exportiert (wenn Sie einen abschließenden Schrägstrich einfügen).

3 Stimmen

Dieser Befehl funktioniert nicht mit Submodulen, siehe stackoverflow.com/questions/1591387/

3 Stimmen

Aber ein Git-Archiv entfernt auch die Versionskontrolle, so dass Sie nicht einfach ein weiteres Git-Checkout durchführen können, um auf den nächsten Tag zu aktualisieren.

10 Stimmen

Ja, man verliert die Versionskontrolle, aber die Zeit, die Git Archive im Vergleich zu Git Clone spart, ist ABSOLUT UNGLAUBLICH! +1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X