Популярная система контроля версий Git дает каждому разработчику собственную копию репозиции проекта или репозитория, то есть хранилища, в комплекте со своей локальной историей и структурой. В терминологии Git такой репозиторий называется локальным. Удаленные репозитории или git remote repository — это копии локальные, но хранящиеся в другом месте в интернете. Такое хранилище может служить резервной копией для тех случаев, если с компьютером что-то случится, а также для совместной работы.
Удаленный доступ и его особенности
Командная работа над проектом невозможна без обучения управлению удаленными репозиториями. Каждая модификация проекта хранится в Сети или на сервере системы контроля версий, такой как Git. Вариантов проекта с небольшими отличиями может быть несколько, и все они доступны другим разработчикам. Некоторые репозитории можно только просматривать, в другие разрешено вносить изменения. Для каждого такого действия в системе Git существует несколько специальных команд, позволяющих управлять удаленными копиями проектов. Все они являются модификацией основной команды — git remote.
Управление удаленным репозиторием в Git
Ниже рассмотрен процесс работы с удаленными хранилищами в Git. Обычно пользователям системы приходится делиться рядом коммитов, а не одним набором изменений. Вместо того, чтобы отправлять набор изменений из рабочей копии в центральный репозиторий, Git позволяет разработчикам обмениваться целыми ветвями между отдельными хранилищами. У каждого пользователя может быть несколько репозиториев, каждый из которых обычно доступен только для чтения или чтения и записи. Сотрудничество с другими людьми предполагает управление этими удаленными репозиториями. Именно для этого нужна команда для удаленного доступа — git remote. Она является одной из частей более широкой системы, отвечающей за синхронизацию изменений.
Особенности удаленного доступа
Записи, зарегистрированные при помощи команды удаленного доступа, используются в сочетании с командами git remote push, fetch и pull. Как git fetch, так и git pull можно использовать для чтения из удаленного репозитория. Команда git remote позволяет создавать, просматривать и удалять подключения к другим репозиториям. Например, push используется для того, чтобы поместить данные в хранилище, а pull, наоборот, чтобы получить. Команда fetch нужна, чтобы извлечь всю информацию, отсутствующую на локальной копии, из удаленного репозитория. После ее выполнения создаются ссылки на все новые ветки, в которых находятся недостающие данные. То есть обновления не сливаются с текущим проектом, а располагаются отдельно.
Впоследствии данные нужно будет сливать вручную, если возникнет такая необходимость. Для автоматического извлечения и соединения репозиториев используется git remote pull. Удаленные подключения больше напоминают закладки, чем прямые ссылки в другие репозитории. Вместо предоставления доступа в режиме реального времени они служат удобными именами, которые могут использоваться для ссылки на не очень удобный URL-адрес.
Команда удаленного доступа по сути является интерфейсом для управления списком записей, которые находятся в файле ./.git/config. Она нужна для управления удаленными хранилищами, удаления несуществующих, отслеживания определенных веток и смены адресов удаленных репозиториев (git change remote).
Отображение удаленных хранилищ
По умолчанию Git удаляет список ранее сохраненных удаленных подключений к другим репозиториям. При этом создается строка, в которой будут указаны имена удаленных репозиториев. Вызов git remote с параметром -v покажет список имен закладок репозитория и, кроме того, соответствующие им URL-адреса. Опция -v означает verbose. Команда git remote add создаст новую запись соединения в удаленном репозитории. После того как удаленная запись была настроена при помощи команды удаленного доступа, ее имя может быть передано другим командам Git для связи с хранилищем.
Конфигурация команды удаленного доступа
Ниже рассмотрены варианты использования команды для управления репозиториями. Простая запись git remote выдает список удаленных подключений. Существует несколько ее конфигураций. Команда удобна для внесения изменений в файл ./.git/config. Также его можно редактировать и вручную при помощи текстового редактора. Команда для удаленного доступа Git является одной из тех, что принимает дополнительные “подкоманды”.
Варианты “подкоманд”:
Ссылки на удаленный репозиторий
Git поддерживает множество способов для создания ссылки на удаленный репозиторий. Два самых простых из них: получение доступа к удаленному репозиторию через HTTP и через протоколы SSH.
HTTP является наиболее легким способом разрешить анонимный доступ только для чтения. Но в первом случае не представляется возможности вносить изменения в проект через HTTP. Для доступа, при котором возможно чтение и запись, нужно использовать SSH. Для этого потребуется действующая учетная запись SSH. Кроме этого, Git поддерживает доступ с проверкой подлинности через SSH.
Особенности клонирования репозитория: git remote origin
Git разработан, чтобы создать каждому программисту полностью изолированную среду для проекта. Это означает, что информация не сообщается автоматически между хранилищами. Вместо этого разработчики должны вручную передавать изменения в локальный репозиторий и отправлять свои коммиты обратно в центральное хранилище. Поэтому команда git remote — простой способ передать URL-адрес для обмена информацией.
Когда разработчик клонирует репозиторий при помощи git clone, он автоматически создает с ним удаленное соединение. При клонировании Git по умолчанию называет центральное хранилище — origin, поэтому команда для обращения к нему записывается как git remote origin. Эта функция полезна для тех, кто создает локальную копию центрального репозитория, так как при ее помощи будет легче публиковать коммиты и сохранять изменения.
Работа с ветками удаленно
Иногда нужно выяснить, какие ветки существуют в удаленном репозитории. Если вы используете GitHub или Gitweb для размещения вашего репозитория, обычно легко определить их имена. Но бывают случаи, когда они недоступны. Также можно управлять отдельными ветками при помощи команды git remote branches.
Удаленное отслеживание ветвей записывается так: <имя удаленного репозитория>/<ветка>. Например, для отображения ветки master на вашем origin-сервере при последнем обращении к ней, нужно проверить ветку origin/master. Если в процессе сотрудничества с другим разработчиком тот выкладывает обновленный проект с новой веткой, то на сервере он будет представлен как ссылка с указанием на коммит, названный именем этой ветки.