Git clone: клонировать конкретную ветку, тег или без истории

Категория: Git · Язык: Bash · Обновлено:

Чтобы клонировать конкретную ветку, выполните git clone -b имя-ветки --single-branch адрес. Чтобы скачать репозиторий быстрее, добавьте --depth 1: git возьмёт только последний коммит без остальной истории.

Клонировать одну ветку

Bash
git clone -b develop --single-branch https://github.com/user/repo.git

Флаг -b выбирает ветку, с которой начнётся работа. Флаг --single-branch запрещает скачивать остальные ветки. Без него git скачает все ветки, но переключится на выбранную.

Клонировать в нужную папку

Bash
git clone -b develop https://github.com/user/repo.git my-project

Последний аргумент задаёт имя папки. Без него git берёт имя репозитория.

Клонировать тег

Bash
git clone -b v1.4.0 --depth 1 https://github.com/user/repo.git

Флаг -b принимает и имена тегов. После такого клонирования вы окажетесь в состоянии «detached HEAD»: это нормально, тег не ветка. Чтобы работать дальше, создайте ветку: git switch -c my-fix.

Клонировать без истории

Вариант

Что скачивается

--depth 1

Только последний коммит, без остальной истории

--depth 50

Последние 50 коммитов

--filter=blob:none

Вся история, но содержимое файлов подгружается по мере необходимости

--no-checkout

Репозиторий без рабочих файлов, только папка .git

Bash
git clone --depth 1 https://github.com/user/repo.git
git clone --filter=blob:none https://github.com/user/repo.git

Как докачать остальное позже

Bash
git fetch --unshallow                     # превратить неполный клон в полный
git remote set-branches origin '*'        # разрешить скачивать все ветки
git fetch origin                          # скачать их

Частые вопросы

Как проверить, что клон неполный?

Выполните git rev-parse --is-shallow-repository: ответ true означает, что история обрезана.

Можно ли делать push из клона с --depth 1?

Да, отправка работает. Но для некоторых операций, например поиска общего предка, истории может не хватить: тогда используйте git fetch --unshallow.