git clone

В этой статье подробно рассматривается команда git clone. git clone — это утилита командной строки Git для выбора существующего репозитория с последующим созданием его клона или копии. На этой странице описаны варианты расширенной конфигурации и распространенные примеры использования команды git clone. Будут рассмотрены следующие вопросы:

  • Клонирование локального или удаленного репозитория
  • Клонирование репозитория без рабочего каталога
  • Поверхностное клонирование — частичное клонирование репозиториев
  • Синтаксис URL-адресов и поддерживаемые протоколы Git

В руководстве по настройке репозитория мы рассмотрели пример классического использования команды git clone. На этой странице приводятся более сложные сценарии клонирования и конфигурации.

Назначение: создание копии проекта для совместной работы в разных репозиториях

Если проект уже был настроен в центральном репозитории, для создания его копии чаще всего используется команда git clone. Как и в случае с командой git init, клонирование обычно делается один раз. После того как разработчик получает рабочую копию, все операции контроля версий и совместная работа осуществляются уже из локального репозитория.

Совместная работа в разных репозиториях

Важно понимать, что рабочая копия в Git существенно отличается от копии, получаемой при загрузке кода из репозитория SVN. В отличие от SVN, в Git рабочая копия и центральный репозиторий являются полноценными репозиториями.

Поэтому совместная работа в Git принципиально отличается от SVN. В SVN действуют принципы отношения между центральным репозиторием и рабочей копией, тогда как в Git совместная работа основана на взаимодействии между репозиториями. Вместо того чтобы загружать рабочую копию в центральный репозиторий SVN, в Git вы отправляете (push) коммиты из одного репозитория в другой или копируете (pull) их в обратном направлении.

Обучающий материал по Git: создание рабочей копии репозитория для совместной работы Обучающий материал по Git: совместная работа в разных репозиториях

Вы без труда можете назначать особые роли определенным репозиториям Git. Таким образом можно обозначить один из репозиториев Git как «центральный» и затем воспроизвести централизованный процесс с использованием Git. Суть в том, что такой подход требует договоренностей, поскольку он не встроен в систему контроля версий.

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

Чаще всего с помощью команды git clone выбирается существующий репозиторий и создается его клон или копия. Это делается в новом каталоге и в другом месте. Исходный репозиторий может находиться в локальной файловой системе или на удаленном устройстве, к которому можно получить доступ с помощью поддерживаемых протоколов. Команда git clone копирует существующий репозиторий Git. Она похожа на команду SVN checkout, но имеет некоторые отличия: так, полученная «рабочая копия» представляет собой полноценный репозиторий Git с собственной историей и файлами, полностью обособленный от исходного репозитория.

Для удобства в процессе клонирования автоматически создается удаленный доступ к исходному репозиторию (такое соединение называется origin). Это упрощает взаимодействие с центральным репозиторием. Автоматическое соединение обеспечивается за счет создания ссылок Git на концы удаленных веток в каталоге refs/remotes/origin, а также инициализации переменных конфигурации remote.origin.url и remote.origin.fetch.

Применение команды git clone демонстрируется на примере в руководстве по настройке репозитория. Ниже показано, как можно получить локальную копию центрального репозитория. Он расположен на сервере по адресу example.com, к которому можно подключиться по протоколу SSH, используя имя пользователя john:

git clone ssh://john@example.com/path/to/my-project.git
cd my-project
# Начало работы над проектом

Первая команда инициализирует новый репозиторий Git в каталоге my-project на локальной машине и наполняет его содержимым центрального репозитория. Теперь вы можете перейти в проект и приступить к редактированию файлов, созданию снимков состояния и взаимодействию с другими репозиториями. Обратите внимание, что у клонированного репозитория отсутствует расширение .git. Это означает, что у локальной копии есть рабочий каталог.

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

git clone <repo> <directory>

Клонирование репозитория из <repo> в директорию ~<directory>! на локальном устройстве.

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

git clone --branch <tag> <repo>

Клонирование репозитория из <repo> и клонирование только ссылки на <tag>.

Поверхностное клонирование

git clone -depth=1 <repo>

Эта команда клонирует репозиторий, расположенный в <repo>, при этом количество коммитов в копируемой истории определяется опцией depth=1. В примере создается клон <repo>, и в него включается только последний коммит. Поверхностное клонирование особенно эффективно, когда вы работаете с репозиториями с объемной историей коммитов. Так вы сможете устранить проблемы с масштабированием в виде ограничений на использование дискового пространства и чрезмерной продолжительности операции клонирования. 

Варианты конфигурации

git clone -branch

Аргумент -branch позволяет выбрать ветку для клонирования. В противном случае клонируется ветка, на которую указывает HEAD в удаленном репозитории (обычно основная ветка). Кроме того, для этих целей команде можно назначить тег.

 

git clone -branch new_feature git://remoterepository.git

В примере выше клонируется только ветка new_feature из удаленного репозитория Git. Эта опция нужна исключительно для удобства и позволяет сэкономить время при получении ссылки HEAD в репозитории, а затем и при извлечении необходимой ссылки.

Сравнение команд git clone -mirror и git clone -bare

git clone --bare

Как и git init --bare, аргумент -bare при назначении команде git clone приводит к созданию копии удаленного репозитория без рабочего каталога. Это означает, что репозиторий будет содержать историю проекта, к которой можно выполнять запросы push и pull, но которую нельзя редактировать напрямую. Кроме того, в репозитории, клонированном с опцией -bare, не будут настроены удаленные ветки. Как и git init --bare, эта команда создает удаленный репозиторий, который разработчики не смогут редактировать напрямую.

git clone --mirror

Вместе с аргументом --mirror команде неявно назначается и аргумент --bare. Поэтому можно сказать, что опция --mirror наследует поведение --bare, создавая «чистый» репозиторий без изменяемых рабочих файлов. Кроме того, --mirror клонирует ссылки удаленного репозитория и сохраняет конфигурацию отслеживания удаленных веток. Затем вы можете выполнить команду git remote update на созданном зеркале, в результате чего будут перезаписаны все ссылки из исходного репозитория. Так вы получите идентичные функциональные возможности для работы.

Другие варианты конфигурации

Исчерпывающий список опций git clone приведен в официальной документации по Git. В этом документе будут рассмотрены в том числе и другие распространенные опции.

git clone --template

git clone --template=<template_directory> <repo location>

Команда клонирует репозиторий, расположенный в <repo location>, и применяет шаблон из каталога <template directory> к только что созданной локальной ветке. Подробные сведения о шаблонах Git см. на странице команды git init.
 

URL-адреса в Git

В Git используется особый синтаксис URL-адресов, с помощью которого командам назначается расположение удаленных репозиториев. Поскольку в работе с удаленными репозиториями чаще всего используется команда git clone, синтаксис URL-адресов в Git будет рассмотрен на этой странице.
 

URL-протоколы в Git

- SSH

Secure Shell (SSH) — это популярный сетевой протокол, обеспечивающий защищенную аутентификацию. Большинство серверов настроены для работы с ним по умолчанию. Из-за специфики протокола для входа на центральный сервер вам нужно знать учетные данные. ssh://[user@]host.xz[:port]/path/to/repo.git/

- GIT
 

Уникальный протокол Git. Вместе с Git поставляется специальный демон, который использует отдельный порт (9418). Этот протокол похож на SSH, однако GIT НЕ ОБЛАДАЕТ средствами аутентификации. git://host.xz[:port]/path/to/repo.git/
 

- HTTP
 

Протокол для передачи гипертекста, который повсеместно используется во Всемирной паутине. Чаще всего применяется для передачи данных веб-страниц в формате HTML через Интернет. Git можно настроить для работы по HTTP. http[s]://host.xz[:port]/path/to/repo.git/
 

Резюме

В этом документе мы подробно рассмотрели команду git clone. Ниже перечислены основные моменты:

1. Команда git clone предназначена для создания копии целевого репозитория.

2. Целевой репозиторий может находиться в локальной системе или на удаленном устройстве.

3. Git поддерживает несколько сетевых протоколов для установки соединения с удаленными репозиториями.

4. Существует множество вариантов конфигурации команды, которые позволяют изменять содержание клона.
 

Подробные сведения о возможностях git clone см. в официальной документации по Git. Примеры использования команды git clone на практике также можно найти в нашем руководстве по настройке репозитория.

 

Готовы изучить Git?

Попробуйте это интерактивное учебное руководство.

Начните прямо сейчас