Как сделать клон конкретного тега

192

От 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

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

Цзян Цзюнь
источник
Возможный дубликат Загрузите определенный тег с Git
Виктор Сергиенко
2
Вы правы, но разницы мало. Когда я задаю этот вопрос, в моей ситуации мне нужно было сделать это в одной строке и использовать clone, и я застрял в «почему - ветвь не работает». Лучший ответ этого URL clone-> checkout, который не может решить мой вопрос. :)
Цзян Июн

Ответы:

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

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

Эрик Сонье
источник
92
К вашему сведению: также укажите, --depth 1чтобы не загружать любые текущие коммиты.
Acumenus
1
Прекрасно работает в git 1.8.4.1
тако
Это не работает После клона, если вы это сделаете, git tagон не показывает тега
пользователь без шляпы
Обратите внимание, что если ссылка неоднозначна, и у вас есть ветвь и тег с одинаковым именем, это предпочтительнее для ветки.
Кит Смайли
1
Что такое долгосрочный коммит?
d512
74

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

git clone <repo_url> --branch <tag_name> --single-branch
Сахил калра
источник
3
Есть --single-branchэквивалент --depth 1?
igracia
14
Нет, это не эквивалентно. - одна ветка клонирует историю для всей ветки. С --depth 1 история вообще не клонируется.
Мартин Крунг
2
Также --single-branchподразумевается, когда --depthиспользуется. С ручнойWhen 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    

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

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

Или

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
источник
6
--depth 1это драгоценный камень, поэтому многие люди скачивают всю историю git только для того, чтобы использовать HEAD.
MGP
2
--depth 1должно быть сделано по умолчанию; если кто-то пытается выписать предыдущий коммит, ему нужно будет загрузить остальные.
Джикку Хосе
3

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

git clone --help

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

git clone --branch tag_name

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

git clone repo_url 
cd repo
git checkout tag_name
mathsyouth
источник
1

Клонирование определенного тега может вернуть состояние «отделенный заголовок» .

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

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.

Ноам Манос
источник