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?



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


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

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

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.