Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

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

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

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

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

Склонируем хранилище проекта 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 .

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

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

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

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

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

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

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

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

Контрольные вопросы

  1. Какой командой копируется удаленное хранилище из Git-сервера?

  2. Склонируйте хранилище по адресу https://github.com/pmodels/mpich.git.

  3. Каким способом можно выбрать место в файловой системе для локального хранилища?

  4. Как можно извлечь адрес хранилища у проекта на GitHub?

  5. Как можно ускорить загрузку хранилища по сети?

  6. Чем отличаются публичное хранилище от приватного с точки зрения доступа к ним?

  7. Какие элементы можно выделить из адреса удаленного хранилища?

  8. Какие протоколы доступа к удаленному хранилищу Git вы знаете? Какими из них вы уже пользовались?

  9. Какую возможность дает привязка хранилища к имени пользователя?

Упражнения

  1. Склонируйте хранилище json из сервера github.com у пользователя nlohmann по протоколу http.

  2. Склонируйте локальное хранилище в соседний каталог. Адрес локального хранилища совпадает с путевым именем рабочего каталога.

  3. Сравните скорость загрузки одного и того же хранилища с полной и неполной историей.