Cómo clonar una etiqueta específica


192

De git-clone (1) Página del manual

--branch También puede tomar etiquetas y separar el HEAD en ese commit en el repositorio resultante.

Lo intenté

git clone --branch <tag_name> <repo_url>

Pero no funciona. Vuelve:

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

¿Cómo usar este parámetro?



2
Tienes razón, pero poca diferencia. Cuando hice esta pregunta, en mi situación, necesitaba hacer esto en una línea y debía usarlo clone, y me quedé atrapado en "por qué - la rama no funciona". La mejor respuesta de esa url utilizada clone-> checkout, que no puede resolver mi pregunta. :)
Jiang Jun

Respuestas:


327
git clone --depth 1 --branch <tag_name> <repo_url>

--depth 1 es opcional, pero si solo necesita el estado en esa revisión, probablemente desee omitir la descarga de todo el historial hasta esa revisión.


92
FYI: especifique también --depth 1para evitar la descarga de confirmaciones no actuales.
Acumenus

1
Funciona bien en git 1.8.4.1
taco

Esto no funciona Después de clonar, si lo hace, git tagno muestra etiqueta
el usuario sin sombrero

Tenga en cuenta que si la referencia es ambigua y tiene una rama y una etiqueta con el mismo nombre, esto preferirá la rama.
Keith Smiley

1
¿Qué es una confirmación no actual?
d512

74

Use la --single-branchopción para clonar solo el historial que conduce a la punta de la etiqueta . Esto ahorra una gran cantidad de código innecesario de ser clonado.

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

3
¿Es --single-branchequivalente a --depth 1?
igracia

14
No, no es equivalente. --single-branch clona la historia de una rama completa. Con --depth 1 no se clona ninguna historia.
Martin Krung

2
También --single-branchestá implícito cuando --depthse usa. Del manualWhen 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    

Será más rápido que:

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

O

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

66
--depth 1es una joya, muchas personas descargan todo el historial de git solo para usar el HEAD.
Pop

2
--depth 1debe hacerse por defecto; Si alguien intenta chequear una confirmación anterior, se le debe solicitar que descargue el resto.
Jikku Jose

3

Usa el comando

git clone --help

para ver si tu git admite el comando

git clone --branch tag_name

Si no, solo haz lo siguiente:

git clone repo_url 
cd repo
git checkout tag_name

1

Clonar una etiqueta específica, podría devolver el estado 'CABEZA separada' .

Como solución alternativa, primero intente clonar el repositorio y luego verifique una etiqueta específica. Por ejemplo:

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

Nota: desde Git 1.8.5 , puede usar -C <path>, en lugar de --work-treey --git-dir.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.