So klonen Sie ein bestimmtes Tag

188

Von git-clone (1) Handbuchseite

--branch kann auch Tags nehmen und den HEAD bei diesem Commit im resultierenden Repository trennen.

Ich habe es versucht

git clone --branch <tag_name> <repo_url>

Aber es funktioniert nicht. Es gibt zurück:

warning: Remote branch 2.13.0 not found in upstream origin, using HEAD instead

Wie benutze ich diesen Parameter?

Jiang Jun
quelle
Mögliches Duplikat von Download eines bestimmten Tags mit Git
Victor Sergienko
2
Du hast recht, aber wenig Unterschied. Wenn ich diese Frage stelle, musste ich dies in meiner Situation in einer Zeile tun und verwenden clone, und ich war festgefahren, warum - Zweig funktioniert nicht “. Die beste Antwort dieser URL verwendet clone-> checkout, die meine Frage nicht lösen kann. :)
Jiang Jun

Antworten:

315
git clone --branch <tag_name> <repo_url>

Dieser Befehl wird in Git 1.7.9.5 nicht unterstützt.

Ich benutze Git 1.8.3.5 und es funktioniert

Erik Saunier
quelle
88
Zu Ihrer Information: Geben Sie außerdem an --depth 1, um das Herunterladen nicht aktueller Commits zu vermeiden.
Acumenus
1
Funktioniert gut in Git 1.8.4.1
Taco
Das funktioniert nicht. Nach dem Klonen, wenn Sie es tun git tag, zeigt es kein Tag
Der Benutzer ohne Hut
Beachten Sie, dass der Zweig bevorzugt wird, wenn der Verweis nicht eindeutig ist und Sie einen Zweig und ein Tag mit demselben Namen haben.
Keith Smiley
1
Was ist ein langfristiges Commit?
d512
74

Verwenden Sie die --single-branchOption, um nur den Verlauf zu klonen, der zur Spitze des Tags führt . Dies erspart viel unnötigen Code vor dem Klonen.

git clone <repo_url> --branch <tag_name> --single-branch
Sahil Kalra
quelle
3
Ist --single-branchgleichbedeutend mit --depth 1?
igracia
14
Nein, es ist nicht gleichwertig. --single-branch klont den Verlauf für einen ganzen Zweig. Mit --depth 1 wird überhaupt keine Historie geklont.
Fabian Thommen
2
Wird auch --single-branchimpliziert, wenn --depthverwendet wird. Aus dem HandbuchWhen creating a shallow clone with the --depth option, this is the default
koda
33
git clone -b 13.1rc1-Gotham  --depth 1  https://github.com/xbmc/xbmc.git
Cloning into 'xbmc'...
remote: Counting objects: 17977, done.
remote: Compressing objects: 100% (13473/13473), done.
Receiving objects:  36% (6554/17977), 19.21 MiB | 469 KiB/s    

Wird schneller sein als:

git clone https://github.com/xbmc/xbmc.git
Cloning into 'xbmc'...
remote: Reusing existing pack: 281705, done.
remote: Counting objects: 533, done.
remote: Compressing objects: 100% (177/177), done.
Receiving objects:  14% (40643/282238), 55.46 MiB | 578 KiB/s

Oder

git clone -b 13.1rc1-Gotham  https://github.com/xbmc/xbmc.git
Cloning into 'xbmc'...
remote: Reusing existing pack: 281705, done.
remote: Counting objects: 533, done.
remote: Compressing objects: 100% (177/177), done.
Receiving objects:  12% (34441/282238), 20.25 MiB | 461 KiB/s
RzR
quelle
6
--depth 1ist ein Juwel, so viele Leute laden die gesamte Git-Geschichte herunter, nur um die zu nutzen HEAD.
MGP
2
--depth 1sollte standardmäßig eingestellt werden; Wenn jemand versucht, ein vorheriges Commit zu überprüfen, sollte er aufgefordert werden, den Rest herunterzuladen.
Jikku Jose
3

Verwenden Sie den Befehl

git clone --help

um zu sehen, ob dein Git den Befehl unterstützt

git clone --branch tag_name

Wenn nicht, gehen Sie einfach wie folgt vor:

git clone repo_url 
cd repo
git checkout tag_name
Mathsyouth
quelle
1

Das Klonen eines bestimmten Tags kann den Status "Trennender HEAD" zurückgeben .

Versuchen Sie als Problemumgehung, zuerst das Repo zu klonen und dann ein bestimmtes Tag auszuchecken. Beispielsweise:

repo_url=https://github.com/owner/project.git
repo_dir=$(basename $repo_url .git)
repo_tag=0.5

git clone --single-branch $repo_url # using --depth 1 can show no tags
git --work-tree=$repo_dir --git-dir=$repo_dir/.git checkout tags/$repo_tag

Hinweis: Seit Git 1.8.5 können Sie -C <path>anstelle von --work-treeund verwenden --git-dir.

Noam Manos
quelle