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 branch
СМ. РЕШЕНИЕ
Изучите Git с помощью Bitbucket Cloud
Вы легко можете задавать особую роль определенным репозиториям 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>
Клонирование репозитория из
в директорию ~
на локальной машине.
Клонирование конкретного тега
git clone --branch <tag> <repo>
Клонирование репозитория из
и клонирование только ссылки на
.
Поверхностное клонирование
git clone -depth=1 <repo>
Эта команда клонирует репозиторий, расположенный в
, при этом количество коммитов в копируемой истории определяется опцией depth=1. В примере создается клон
, и в него включается только последний коммит. Поверхностное клонирование особенно эффективно, когда вы работаете с репозиториями с объемной историей коммитов. Объемная история коммитов может привести к появлению проблем с масштабированием в виде ограничений на использование дискового пространства и чрезмерной продолжительности операции клонирования. Поверхностное клонирование помогает устранить эти проблемы.
Варианты конфигурации
git clone -branch
Аргумент -branch
позволяет выбрать ветку для клонирования. В противном случае будет клонирована ветка, на которую указывает HEAD
в удаленном репозитории (обычно это главная ветка). Кроме того, для этих целей в команде можно задать тег вместо ветки.
git clone --branch
Сравнение команд 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>
Команда клонирует репозиторий, расположенный в
, и применяет шаблон из каталога к созданной локальной ветке. Подробные сведения о шаблонах 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 на практике также можно найти в нашем руководстве по настройке репозитория.
Поделитесь этой статьей
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.