git clone
Клонировать репозиторий в новую директорию
Описание
git clone копирует существующий репозиторий: скачивает всю историю коммитов, ветки и теги, создаёт рабочее дерево и настраивает remote origin, указывающий на исходный репозиторий. После клонирования репозиторий полностью независим — локальные изменения не влияют на оригинал до явного push.
Команда поддерживает несколько протоколов: https:// (прост в настройке, требует аутентификацию по логину/токену), git@ SSH (рекомендуется для регулярной работы — удобнее с SSH-ключами), локальный путь на файловой системе и протокол git:// (устаревший, без шифрования).
Для больших репозиториев с долгой историей можно использовать shallow clone (--depth) — скачать только последние N коммитов без полной истории. Это ускоряет клонирование и экономит место, но ограничивает некоторые операции.
Синтаксис
- <репозиторий> — URL или путь к исходному репозиторию.
- <директория> — куда клонировать. По умолчанию — имя репозитория без
.git.
Поддерживаемые форматы URL:
Флаги и опции
| Флаг | Описание |
|---|---|
--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
Советы и подводные камни
HTTPS требует вводить токен при каждой операции с remote (или настраивать credential helper). SSH-ключ, добавленный в
~/.ssh/authorized_keys на GitHub/GitLab, аутентифицирует автоматически. Создайте ключ: ssh-keygen -t ed25519 -C "email" и добавьте публичный ключ в настройки аккаунта.
Для сборки и тестирования полная история не нужна. В GitHub Actions используйте
fetch-depth: 1 в actions/checkout. Это сократит время клонирования больших репозиториев с минут до секунд.
В shallow-репозитории недоступны команды, требующие полной истории:
git log --all покажет усечённую историю, git bisect работает в пределах доступных коммитов, git rebase на коммиты за пределами глубины провалится. При необходимости используйте git fetch --unshallow.