git basic

git clone

Клонировать репозиторий в новую директорию

Описание

git clone копирует существующий репозиторий: скачивает всю историю коммитов, ветки и теги, создаёт рабочее дерево и настраивает remote origin, указывающий на исходный репозиторий. После клонирования репозиторий полностью независим — локальные изменения не влияют на оригинал до явного push.

Команда поддерживает несколько протоколов: https:// (прост в настройке, требует аутентификацию по логину/токену), git@ SSH (рекомендуется для регулярной работы — удобнее с SSH-ключами), локальный путь на файловой системе и протокол git:// (устаревший, без шифрования).

Для больших репозиториев с долгой историей можно использовать shallow clone (--depth) — скачать только последние N коммитов без полной истории. Это ускоряет клонирование и экономит место, но ограничивает некоторые операции.

Синтаксис

git clone [ОПЦИИ] <репозиторий> [<директория>]

Поддерживаемые форматы URL:

# HTTPS git clone https://github.com/user/repo.git # SSH (рекомендуется) git clone git@github.com:user/repo.git # Локальный путь git clone /path/to/local/repo # Локальный путь с явным указанием протокола git clone file:///path/to/local/repo

Флаги и опции

ФлагОписание
--depth <n>Shallow clone: скачать только последние n коммитов. Ускоряет клонирование больших репозиториев. История усечена.
--branch <ветка> / -bКлонировать и переключиться на указанную ветку или тег вместо ветки по умолчанию.
--single-branchСкачать только историю указанной ветки (или ветки по умолчанию). Остальные ветки не скачиваются.
--no-single-branchЯвно скачать все ветки. Поведение по умолчанию.
--recurse-submodulesИнициализировать и обновить субмодули после клонирования.
--bareСоздать «голый» клон без рабочего дерева (только содержимое .git/).
--mirrorСоздать зеркальный клон (подразумевает --bare). Все refs, включая remote-tracking branches, копируются напрямую.
--origin <имя> / -oИспользовать указанное имя вместо origin для remote.
--local / -lКлонировать локальный репозиторий с жёсткими ссылками вместо копирования файлов (быстрее, но привязывает к источнику).
--no-localНе использовать жёсткие ссылки при локальном клонировании.
--filter=<фильтр>Частичное клонирование: скачать только нужные объекты. Например, --filter=blob:none — без содержимого файлов (только метаданные).
--quiet / -qПодавить прогресс-вывод.
--verbose / -vПодробный вывод операций.

Паттерны использования

Стандартное клонирование

# Клонировать через HTTPS
git clone https://github.com/user/my-app.git

# Клонировать через SSH
git clone git@github.com:user/my-app.git

# Клонировать в конкретную папку
git clone git@github.com:user/my-app.git ~/projects/app

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

# Клонировать только ветку develop
git clone -b develop --single-branch \
  git@github.com:user/my-app.git

# Быстрое клонирование для CI/CD
git clone -b main --depth 1 \
  git@github.com:user/my-app.git

Shallow clone для экономии трафика

# Только последние 10 коммитов
git clone --depth 10 git@github.com:user/big-repo.git

# При необходимости — «углубить» историю
cd big-repo
git fetch --deepen=100
# Или получить всю историю
git fetch --unshallow

Клонирование с субмодулями

# Клонировать и сразу обновить субмодули
git clone --recurse-submodules git@github.com:user/repo.git

# Если уже клонировали без флага
cd repo
git submodule update --init --recursive

Зеркало репозитория

# Создать точное зеркало (для бэкапа или переноса)
git clone --mirror git@github.com:user/repo.git repo.git

# Обновить зеркало
cd repo.git
git remote update

Частичное клонирование (blobless)

# Скачать историю без содержимого файлов
# Содержимое запрашивается по мере необходимости
git clone --filter=blob:none \
  git@github.com:user/huge-repo.git

# Только дерево без содержимого и деревьев
git clone --filter=tree:0 \
  git@github.com:user/huge-repo.git

Советы и подводные камни

Совет: используйте SSH вместо HTTPS для регулярной работы
HTTPS требует вводить токен при каждой операции с remote (или настраивать credential helper). SSH-ключ, добавленный в ~/.ssh/authorized_keys на GitHub/GitLab, аутентифицирует автоматически. Создайте ключ: ssh-keygen -t ed25519 -C "email" и добавьте публичный ключ в настройки аккаунта.
Совет: --depth 1 существенно ускоряет CI/CD пайплайны
Для сборки и тестирования полная история не нужна. В GitHub Actions используйте fetch-depth: 1 в actions/checkout. Это сократит время клонирования больших репозиториев с минут до секунд.
Внимание: shallow clone ограничивает некоторые операции
В shallow-репозитории недоступны команды, требующие полной истории: git log --all покажет усечённую историю, git bisect работает в пределах доступных коммитов, git rebase на коммиты за пределами глубины провалится. При необходимости используйте git fetch --unshallow.