W3docs

git clone

Узнайте о команде git clone, её использовании, основных параметрах конфигурации и форматах Git URL.

Что делает git clone

Команда git clone копирует существующий репозиторий в новый каталог на вашем компьютере. За один шаг она:

  • Создаёт целевой каталог и инициализирует в нём новый локальный репозиторий (запускать git init предварительно не нужно).
  • Загружает полную историю проекта — каждый коммит, ветку и тег.
  • Добавляет исходный репозиторий как удалённый с именем origin.
  • Создаёт ветку отслеживания для каждой ветки на удалённом репозитории и переключается на ветку по умолчанию (обычно main или master) в вашем рабочем каталоге.

Именно так почти каждый разработчик получает рабочую копию общего проекта, поэтому git clone обычно является самой первой командой Git, которую вы запускаете в новом проекте.

Gitclone

Базовое использование

Общая форма команды принимает URL репозитория и, опционально, имя каталога:

git clone <repo> [<directory>]

Например, клонирование проекта по SSH с сервера, доступного по адресу example.com, с именем пользователя x_person:

git clone ssh://[email protected]/path/to/team-project.git
cd team-project
# Start editing files, committing snapshots, and pushing to the remote

Это инициализирует новый репозиторий в папке team-project и заполняет его содержимым центрального репозитория. После клонирования вы можете перейти в каталог проекта командой cd и начать изменять файлы, фиксировать снимки состояния и взаимодействовать с удалённым репозиторием.

Клонирование в указанную папку

По умолчанию Git называет новый каталог по имени репозитория. Чтобы клонировать в папку по вашему выбору, добавьте аргумент <directory>:

git clone https://example.com/team-project.git my-project
cd my-project

Это клонирует репозиторий в my-project вместо team-project.

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

Передайте --branch (сокращённо: -b) с именем ветки или тегом, чтобы переключиться на что-то отличное от ветки по умолчанию удалённого репозитория:

# Check out the develop branch instead of the default
git clone --branch develop https://example.com/team-project.git

# Check out the state at tag v1.0 (results in a detached HEAD)
git clone --branch v1.0 https://example.com/team-project.git

Когда вы передаёте тег, рабочее дерево переключается на этот тег в состоянии detached HEAD, поскольку тег — это не ветка, в которую можно делать коммиты.

Полезные параметры clone

Эти параметры позволяют настроить, что именно git clone загружает и как ведёт себя новый репозиторий.

--depth (поверхностное клонирование)

--depth <n> создаёт поверхностный клон, который сохраняет только последние <n> коммитов вместо полной истории. Это значительно быстрее для больших репозиториев и широко используется в CI-конвейерах, где полная история не нужна.

git clone --depth 1 https://example.com/team-project.git

--single-branch

--single-branch загружает историю только одной ветки (ветки по умолчанию или той, что указана в --branch), а не всех веток. Этот параметр подразумевается при использовании --depth.

git clone --single-branch --branch main https://example.com/team-project.git

--recurse-submodules

Если проект использует подмодули, параметр --recurse-submodules клонирует и инициализирует их за один шаг, и вам не нужно запускать git submodule update --init после этого.

git clone --recurse-submodules https://example.com/team-project.git

-o (переименование удалённого репозитория)

По умолчанию источник добавляется как удалённый репозиторий origin. Используйте -o <name>, чтобы выбрать другое имя. Смотрите git remote для управления удалёнными репозиториями после клонирования.

git clone -o upstream https://example.com/team-project.git

--bare и --mirror

  • --bare создаёт копию репозитория без рабочего каталога. Полученный репозиторий содержит историю проекта, в него можно выполнять push и pull, но в нём нет переключённых файлов для редактирования. Это формат, используемый для репозиториев на серверах.
  • --mirror подразумевает --bare, но идёт дальше: он копирует все ссылки (ветки, теги, заметки, ссылки на удалённые ветки) и настраивает удалённый репозиторий так, чтобы зеркало оставалось точным отражением источника. Используется в основном для перемещения или резервного копирования репозитория.
git clone --bare https://example.com/team-project.git
git clone --mirror https://example.com/team-project.git

Разница между git init и git clone

git init и git clone часто путают. Ключевое различие:

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

git clone не требует предварительного запуска git init — он сам инициализирует локальный репозиторий и настраивает ветки отслеживания.

Git URL

У Git есть собственный синтаксис URL для указания командам адреса удалённого репозитория. Поскольку git clone почти всегда обращается к удалённому репозиторию, важно понимать эти URL. Git поддерживает четыре семейства протоколов: Git, SSH, HTTPS и Local. Все они, кроме HTTPS, требуют наличия установленного и работающего Git на сервере.

Протокол Git

Протокол Git уникален для Git. Он обслуживается демоном, который слушает порт 9418 и предоставляет анонимный, преимущественно читаемый доступ, похожий на SSH, но без какой-либо аутентификации.

git clone git://host.xz/path/to/repo.git

Его преимущество — быстрая передача данных. Недостатки — отсутствие аутентификации (поэтому он редко используется для записи) и более сложная настройка сервера.

Протокол SSH

Secure Shell (SSH) — это сетевой протокол для безопасного входа с одного компьютера на другой. Это наиболее распространённый протокол для аутентифицированного доступа на чтение/запись, и SSH-доступ настроен по умолчанию на большинстве хостинговых платформ. Перед подключением необходимо настроить учётные данные (SSH-ключ) на сервере.

git clone ssh://user@server/project.git

# Many hosts also accept the shorter "scp-like" form:
git clone user@server:project.git

SSH шифрует и аутентифицирует весь трафик, сжимает данные перед передачей и легко настраивается. Его главное ограничение — отсутствие поддержки анонимного доступа. Смотрите наш раздел SSH key для настройки ключей.

Протокол HTTPS

HTTPS (HyperText Transfer Protocol Secure) — это протокол для безопасной передачи данных в интернете, и Git может использовать его для обмена репозиториями.

git clone https://example.com/gitproject.git

HTTPS прост в настройке, шифрует передачу данных и легко проходит через корпоративные межсетевые экраны (порт 443 практически всегда открыт), что делает его одним из наиболее широко используемых протоколов. Его главный недостаток — немного более высокие накладные расходы на шифрование, что может сделать клонирование незначительно медленнее по сравнению с чистым протоколом Git.

Локальный протокол

При использовании локального протокола «удалённый» репозиторий — это просто другой каталог на том же диске или в общей файловой системе. Когда члены команды совместно используют файловую систему, они могут клонировать, выполнять push и pull через обычные пути.

git clone /opt/git/project.git

# Or with an explicit file:// URL:
git clone file:///opt/git/project.git

Связанные команды

После клонирования следующие главы охватывают повседневный рабочий процесс:

  • git fetch и git pull — загрузка и интеграция обновлений из удалённого репозитория.
  • git branch и git checkout — создание веток и переключение между ними.
  • git remote — просмотр и управление удалённым репозиторием origin, который настроил git clone.

Практика

Практика
Какова основная цель команды 'git clone' в Git?
Какова основная цель команды 'git clone' в Git?
Was this page helpful?