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.