Клонирование хранилища

Клонирование хранилища#

В этом уроке мы узнаем:

  • о команде git clone и как им пользоваться;

  • как достать адрес публичного хранилища у проекта на GitHub;

  • об опции --depth команды git clone;

  • о способе формирования адреса хранилища.

Команда git clone клонирует хранилище, адрес которого передано в качестве аргумента команды. Вторым, необязательным, аргументом выступает имя рабочего каталога.

Откуда достать адрес публичного хранилища? Многие открытые проекты размещаются на GitHub. Зайдите на нее, перейдите на главную страничку любого проекта, активируйте выпадающее меню <> Code и нажмите на значок Copy url to clipboard. Адрес хранилища переместится в буфер обмена, откуда он может быть вставлен в терминал комбинацией клавиш Ctrl+V или Ctrl+Shift+V.

../_images/get-address-from-github.png

Склонируем хранилище проекта MPICH, размещенного по адресу https://github.com/pmodels/mpich.git.

bob@pc:~/projects$ git clone https://github.com/pmodels/mpich.git
Клонирование в «mpich»...
remote: Enumerating objects: 250143, done.
remote: Counting objects: 100% (3214/3214), done.
remote: Compressing objects: 100% (1278/1278), done.
remote: Total 250143 (delta 2145), reused 2749 (delta 1933), pack-reused 246929
Получение объектов: 100% (250143/250143), 86.52 МиБ | 5.65 МиБ/с, готово.
Определение изменений: 100% (194822/194822), готово.
bob@pc:~/projects$ ls mpich/
autogen.sh  confdb        contrib       COPYRIGHT  examples  Makefile.am  mpich-doxygen.in  RELEASE_NOTES  test
CHANGES     configure.ac  CONTRIBUTING  doc        maint     modules      README.vin        src

Команда создаст в текущем каталоге каталог mpich, название которого совпадет с названием удаленного хранилища в аргументе-адресе (после исключения расширения .git). Если перед клонированием такой непустой каталог существовал, то команда завершится с ошибкой. Чтобы склонировать хранилище в другой рабочий каталог, его имя передают в команду аргументом после адреса:

git clone https://github.com/pmodels/mpich.git mpich2

Если каталога с таким именем не существует, то он будет создан. Если он существует, то должен быть пустым. Чтобы склонировать хранилище в текущий пустой каталог, передают аргумент ., обозначающий текущий каталог:

mkdir mpich
cd mpich
git clone https://github.com/pmodels/mpich.git .

Warning

Часто точку (обозначение текущего каталога) в конце команды не замечают. Или ее не видят или думают, что она обозначает конец предложения.

Большие проекты клонируются долго и нагружают сеть. Большую часть передаваемых данных занимает история. При низкой скорости загрузки или ограниченного трафика мы готовы пожертвовать частью истории в пользу скорой загрузки. Опция --depth (переводится с английского как “глубина”) принимает целое число – количество последних коммитов, которые будут загружены.

git clone --depth=1 https://github.com/pmodels/mpich.git

При клонировании, сервер не потребовал у нас логина и пароля. Это произошло потому, что мы обращались к публичному хранилищу. Проекты с открытым исходным кодом размещают в публичных хранилищах. В противоположность им, приватные хранилища разрешают доступ к своим содержимым только авторизированным пользователям.

Адрес удаленного хранилища подчиняется общему шаблону. В нем можно выделить:

  • протокол;

  • имя git-сервера;

  • имя пользователя, управляющего хранилищем;

  • имя хранилища.

[протокол]://[имя git-сервера]/[имя_пользователя]/[имя_хранилища]

Протокол задает способ приема и передачи данных и аутентификацию пользователя. Git поддерживает несколько протоколов, из которых популярны http, ssh и локальный (file).

Примерами имен git-серверов могут быть:

  • github.com;

  • gitlab.com;

  • gitlab.company.ru;

То, что хранилище размещено в пространстве пользователя, позволяет использовать совпадающие имена проектов для разных пользователей.

../_images/repo-address.png