Как git клонировать определенный тег

Со страницы git-clone (1)

--branch также может принимать теги и отсоединять HEAD от этого коммита в результирующем репозитории.

Я пытался

git clone --branch <tag_name> <repo_url>

Но это не работает. Он возвращает:

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

Как использовать этот параметр?


person Jiang Jun    schedule 29.11.2013    source источник
comment
возможный дубликат Загрузить определенный тег с помощью Git   -  person Victor Sergienko    schedule 01.10.2014
comment
Вы правы, но разница небольшая. Когда я задаю этот вопрос в моей ситуации, мне нужно было сделать это в одной строке и использовать clone, и я застрял в том, «почему --branch не работает». Лучший ответ для этого URL использовал _2 _- ›_ 3_, что не может решить мой вопрос. :)   -  person Jiang Jun    schedule 08.10.2014


Ответы (6)


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

--depth 1 не является обязательным, но если вам нужно только состояние этой ревизии, вы, вероятно, захотите пропустить загрузку всей истории до этой ревизии.

person Erik Saunier    schedule 11.02.2014
comment
К вашему сведению: также укажите --depth 1, чтобы избежать загрузки каких-либо устаревших коммитов. - person Acumenus; 28.03.2014
comment
Прекрасно работает в git 1.8.4.1 - person taco; 22.08.2014
comment
Это не работает. После клонирования, если вы сделаете git tag, он не покажет тег - person The user with no hat; 16.02.2016
comment
Обратите внимание, если ссылка неоднозначна и у вас есть ветка и тег с одинаковыми именами, это предпочтет ветку. - person Keith Smiley; 22.02.2018
comment
Что такое долгосрочная фиксация? - person d512; 14.04.2020
comment
@ d512 все эти коммиты между инициализацией репо и этим тегом. Если вас не волнует история, используйте --depth 1. - person Giszmo; 17.07.2020
comment
без необязательного параметра --depth 1 это точно так же, как OP, или я что-то пропустил? - person 463035818_is_not_a_number; 30.09.2020

Используйте параметр --single-branch, чтобы клонировать только историю, ведущую к концу тега. Это избавляет от клонирования большого количества ненужного кода.

git clone <repo_url> --branch <tag_name> --single-branch
person Sahil kalra    schedule 11.12.2014
comment
--single-branch эквивалентно --depth 1? - person igracia; 14.01.2016
comment
Нет, не эквивалент. - single-branch клонирует историю для всей ветки. С --depth 1 история вообще не клонируется. - person Martin Krung; 02.02.2016
comment
Также --single-branch подразумевается, когда используется --depth. Из мануала When creating a shallow clone with the --depth option, this is the default - person koda; 18.11.2019

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    

Будет быстрее, чем:

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

Or

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
person RzR    schedule 08.06.2014
comment
--depth 1 - это драгоценный камень, поэтому многие люди скачивают всю историю git только для того, чтобы использовать HEAD. - person MGP; 28.11.2014
comment
--depth 1 следует использовать по умолчанию; если кто-то попытается узнать предыдущую фиксацию, ему будет предложено загрузить остальные. - person Jikku Jose; 30.06.2016

Используйте команду

git clone --help

чтобы узнать, поддерживает ли ваш git команду

git clone --branch tag_name

Если нет, просто сделайте следующее:

git clone repo_url 
cd repo
git checkout tag_name
person mathsyouth    schedule 22.02.2017

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

Пример

git clone --depth 1 --branch 0.37.2 https://github.com/apache/incubator-superset.git

<tag_name> : 0.37.2

<repo_url> : https://github.com/apache/incubator-superset.git
person Akitha_MJ    schedule 21.12.2020

Клонирование определенного тега может вернуть состояние "ОТДЕЛЕННАЯ ГОЛОВА".

В качестве обходного пути попробуйте сначала клонировать репо, а затем проверить конкретный тег. Например:

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

Примечание. Начиная с Git 1.8.5, вы можно использовать -C <path> вместо --work-tree и --git-dir.

person Noam Manos    schedule 26.03.2020