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

9voto

billkw Punkte 2616

In Anlehnung an Peter Johnsons Antwort habe ich mir einen netten kleinen Decknamen zugelegt:

alias gcolt="git checkout $(git tag | sort -V | tail -1)"

auch bekannt als "git checkout latest tag".

Dies beruht auf der GNU-Version von sort, die Situationen wie die von lOranger beschriebene angemessen behandelt:

v1.0.1
...
v1.0.9
v1.0.10

Wenn Sie einen Mac benutzen, brew install coreutils und rufen dann stattdessen gsort auf.

7voto

Kamil Zając Punkte 213

Versuchen:

git clone -b <name_of_the_tag> <repository_url> <destination>

0 Stimmen

Wenn es mehrere Zweige für das Repository gibt, welcher Zweig wird dann geklont?

4voto

artamonovdev Punkte 4132

Auschecken von Tags

Wenn Sie die Versionen der Dateien, auf die ein Tag verweist, einsehen wollen, können Sie einen Git-Checkout durchführen, der allerdings Ihr Repository in den Zustand "detached HEAD" versetzt, was einige unangenehme Nebeneffekte hat:

$ git checkout 2.0.0
Note: checking out '2.0.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final

$ git checkout 2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... add atlas.json and cover image

Wenn Sie im "detached HEAD"-Zustand Änderungen vornehmen und dann einen Commit erstellen, bleibt das Tag gleich, aber Ihr neuer Commit gehört zu keinem Zweig und ist nicht erreichbar, außer über den genauen Commit-Hash. Wenn Sie also Änderungen vornehmen müssen - z.B. wenn Sie einen Fehler in einer älteren Version beheben - werden Sie normalerweise einen Zweig erstellen wollen:

$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'

Wenn Sie dies tun und einen Commit machen, wird sich Ihr version2-Zweig leicht von Ihrem v2.0.0-Tag unterscheiden, da er mit Ihren neuen Änderungen fortschreiten wird.

3voto

J0hnG4lt Punkte 3688

Ich tue dies über die Github-API:

curl -H "Authorization: token %(access_token)s" -sL -o /tmp/repo.tar.gz "http://api.github.com/repos/%(organisation)s/%(repo)s/tarball/%(tag)s" ;\
tar xfz /tmp/repo.tar.gz -C /tmp/repo --strip-components=1 ; \

1 Stimmen

Dies funktioniert für Zweige und Tags, aber nicht für den Kopf von master, für den ein Tag erstellt werden muss. Imho ziemlich eleganter Weg, um minimal große Version zu erhalten.

3voto

ßãlãjî Punkte 6434

Ich habe häufig eine

git clone  --branch <tag_name> <repo_url>

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