git clone

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

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

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

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

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

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

Важно понимать, что рабочая копия в Git существенно отличается от рабочей копии, получаемой при загрузке исходного кода из репозитория SVN. В отличие от SVN, в Git нет разницы между рабочими копиями и центральным репозиторием — все они являются полноценными репозиториями 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 
# Start working on the project

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

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

git clone <repo> <directory>

Clone the repository located at <repo> into the folder called ~<directory>! on the local machine.

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

git clone --branch <tag> <repo>

Clone the repository located at <repo> and only clone the ref for <tag>.

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

git clone -depth=1 <repo>

Clone the repository located at <repo> and only clone the
history of commits specified by the option depth=1. In this example a clone of <repo> is made and only the most recent commit is included in the new cloned Repo. Shallow cloning is most useful when working with repos that have an extensive commit history. An extensive commit history may cause scaling problems such as disk space usage limits and long wait times when cloning. A Shallow clone can help alleviate these scaling issues.

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

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>

Clones the repo at <repo location> and applies the template from <template directory> to the newly created local branch. A thorough refrence on Git templates can be found on our git init page.

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?

Ознакомьтесь с этим интерактивным обучающим руководством.

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