Como clonar uma tag específica no git

192

De git-clone (1) Manual Page

--branch também pode pegar tags e desanexar o HEAD naquele commit no repositório resultante.

eu tentei

git clone --branch <tag_name> <repo_url>

Mas não funciona. Retorna:

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

Como usar este parâmetro?

Jiang Jun
fonte
possível duplicata Baixar uma tag específica com Git
Victor Sergienko
2
Você está certo, mas pouca diferença. Quando eu faço essa pergunta, na minha situação, eu precisava fazer isso em uma linha e devo usá-la clone, e fiquei presa ao "por que --branch não funciona". A melhor resposta desse URL foi usada clone-> checkout, que não pode resolver minha pergunta. :)
Jiang junho

Respostas:

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

Este comando não é suportado no git 1.7.9.5.

Eu uso o git 1.8.3.5 e funciona

Erik Saunier
fonte
92
FYI: especifique também --depth 1para evitar o download de confirmações não atuais.
Acumenus 27/03
1
Funciona bem no git 1.8.4.1
taco
Isso não funciona. Após o clone, se você o fizer, git tagnão exibirá tag
O usuário sem chapéu
Observe que se a referência for ambígua e você tiver uma ramificação e uma tag com o mesmo nome, isso preferirá a ramificação.
21718 Keith Smiley
1
O que é um commit não atual?
d512 14/04
74

Use a --single-branchopção para clonar apenas o histórico que leva à ponta da tag . Isso evita que muitos códigos desnecessários sejam clonados.

git clone <repo_url> --branch <tag_name> --single-branch
Sahil kalra
fonte
3
É --single-branchequivalente a --depth 1?
igracia
14
Não, não é equivalente. - único ramo clona a história de um ramo inteiro. Com - profundidade 1, nenhuma história é clonada.
Martin Krung 02/02
2
Também --single-branchestá implícito quando --depthé usado. Do 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á mais 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

Ou

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
fonte
6
--depth 1é uma jóia, muitas pessoas baixam todo o histórico do git apenas para usar o HEAD.
MGP 28/11
2
--depth 1deve ser feito padrão; se alguém tentar excluir um commit anterior, ele deverá fazer o download do restante.
Jikku Jose
3

Use o comando

git clone --help

para ver se o seu git suporta o comando

git clone --branch tag_name

Caso contrário, faça o seguinte:

git clone repo_url 
cd repo
git checkout tag_name
mathsyouth
fonte
1

A clonagem de uma tag específica pode retornar o estado 'desanexado HEAD' .

Como solução alternativa, tente clonar o repositório primeiro e depois faça check-out de uma tag específica. Por exemplo:

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 o Git 1.8.5 , você pode usar -C <path>, em vez de --work-treee --git-dir.

Noam Manos
fonte