Синхронизация

Синхронизация в Git

В системе SVN используется единый централизованный репозиторий, служащий центром связи для разработчиков. Совместная работа ведется путем передачи наборов изменений между рабочими копиями разработчиков и центральным репозиторием. Однако модель распределенной совместной работы в Git предполагает, что каждый разработчик использует собственную копию репозитория со своей локальной историей и структурой веток. Обычно пользователи делятся не отдельными наборами изменений, а сериями коммитов. Вместо того чтобы выполнять коммит одного набора изменений из рабочей копии в центральный репозиторий, Git позволяет передавать между репозиториями целые ветки.

git remote

Команда git remote позволяет создавать, просматривать и удалять подключения к другим репозиториям. Удаленные подключения скорее похожи на закладки, чем на прямые ссылки на другие репозитории. Они служат удобными именами, с помощью которых можно сослаться на не очень удобный URL-адрес, а не предоставляют доступ к другому репозиторию в режиме реального времени.

Например, на следующем рисунке изображены два удаленных подключения из вашего репозитория к центральному репозиторию и репозиторию другого разработчика. Вместо того, чтобы ссылаться на них по их полным URL-адресам, вы можете передавать командам Git только ярлыки origin и john.

Использование git remote для подключения к другим репозиториям

Обзор использования git remote

По сути, команда git remote — это интерфейс для управления списком записей об удаленных подключениях, которые хранятся в файле /.git/config репозитория. Для просмотра текущего состояния списка удаленных подключений используются следующие команды.

Просмотр конфигураций удаленных репозиториев Git

git remote

Список ваших удаленных подключений к другим репозиториям.

git remote -v

Аналогично команде выше, но включает URL-адрес каждого подключения.

Создание и изменение конфигураций удаленных репозиториев Git

Команда git remote также предоставляет удобный способ изменения файла /.git/config репозитория. Перечисленные ниже команды позволяют управлять подключениями к другим репозиториям и изменять файл /.git/config репозитория. Такого же результата можно достичь, напрямую отредактировав файл /.git/config с помощью текстового редактора.

git remote add <name> <url>

Создание нового подключения к удаленному репозиторию. После добавления удаленного репозитория имя <name> можно использовать в качестве удобного ярлыка для адреса <url> в других командах Git.

git remote rm <name>

Удаление подключения к удаленному репозиторию с именем <name>.

git remote rename <old-name> <new-name>

Переименование удаленного подключения с имени <old-name> на <new-name>.

Обсуждение git remote

Git предоставляет каждому разработчику полностью изолированную среду разработки. Информация не передается между репозиториями автоматически. Вместо этого разработчикам нужно вручную загружать вышестоящие коммиты в локальный репозиторий или вручную отправлять локальные коммиты обратно в центральный репозиторий. Команда git remote представляет собой простой способ передачи URL-адресов в эти команды обмена.

Удаленное подключение к origin

В процессе клонирования с помощью команды git clone автоматически создается удаленное подключение к исходному репозиторию (такое соединение называется origin). Это позволяет разработчикам, создающим локальную копию центрального репозитория, легко загружать вышестоящие изменения или публиковать локальные коммиты. Именно поэтому большинство проектов на основе Git называют свой центральный репозиторий origin.

URL-адреса репозиториев

Git поддерживает различные способы ссылки на удаленный репозиторий. Два наиболее простых способа доступа к удаленному репозиторию: протоколы HTTP и SSH. Протокол HTTP — простой способ разрешить к репозиторию анонимный доступ только для чтения. Пример ниже.

http://host/path/to/repo.git

Однако HTTP-адрес, как правило, не позволяет отправлять коммиты (в любом случае вы не захотите разрешать анонимную отправку изменений с помощью команды push). Чтобы использовать доступ для чтения и записи следует использовать протокол SSH:

ssh://user@host/path/to/repo.git

Вам понадобится лишь действующий аккаунт SSH на хост-машине, а в остальном Git поддерживает аутентифицированный доступ через SSH по умолчанию. Необходимые URL-адреса предоставляются современными безопасными решениями для хостинга от сторонних провайдеров, например Bitbucket.com.

Команды git remote

Команда git remote — одна из многих команд Git, которые принимают дополнительные «подкоманды». Ниже рассмотрены наиболее часто используемые подкоманды git remote.

ADD <NAME> <URL>

Добавляет запись к ./.git/config для удаленного репозитория с именем <name> по URL-адресу <url>.

Принимает параметр -f, который запустит команду git fetch сразу после создания записи об удаленном репозитории.

Принимает параметр --tags, который немедленно запустит команду git fetch и импортирует все теги из удаленного репозитория.

RENAME <OLD> <NEW>

Обновляет ./.git/config для переименования записи с <OLD> на <NEW>. При этом обновляются все удаленно отслеживаемые ветки и настройки конфигурации удаленного репозитория.

REMOVE or RM <NAME>

Изменяет ./.git/config и удаляет удаленный репозиторий с именем <NAME>. При этом удаляются все удаленно отслеживаемые ветки и настройки конфигурации удаленного репозитория.

GET-URL <NAME>

Вывод URL-адресов для записи об удаленном репозитории.

Принимает параметр --push, поскольку URL-адреса чаще отправляют с помощью команды push, а не извлекают с помощью fetch.

При указании параметра --all будут перечислены все URL-адреса для данного удаленного репозитория.

SHOW <NAME>

Выводит общую информацию об удаленном репозитории с именем <NAME>.

PRUNE <NAME>

Удаляет из репозитория <NAME> все локальные ветки, которые отсутствуют в удаленном репозитории.

Принимает параметр --dry-run, который выводит список удаляемых веток, но на самом деле не удаляет их.

Примеры git remote

Зачастую бывает удобно иметь подключение не только к репозиторию origin, но и к репозиториям коллег. Например, если ваш коллега Джон поддерживает общедоступный репозиторий на dev.example.com/john.git, вы можете добавить подключение следующим образом:

git remote add john http://dev.example.com/john.git

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

Просмотр удаленных репозиториев

По умолчанию команда git remote отображает ранее сохраненные удаленные подключения к другим репозиториям. Создается однострочный список закладок с именами удаленных репозиториев.

$ git remote
origin
upstream
other_users_repo

При вызове git remote с параметром -v будет выведен список закладок с именами и соответствующими URL-адресами репозиториев. Параметр -v расшифровывается как «verbose» — подробный. Ниже приведен пример подробного вывода команды git remote.

git remote -v
origin  git@bitbucket.com:origin_user/reponame.git (fetch)
origin  git@bitbucket.com:origin_user/reponame.git (push)
upstream    https://bitbucket.com/upstream_user/reponame.git (fetch)
upstream    https://bitbucket.com/upstream_user/reponame.git (push)
other_users_repo    https://bitbucket.com/other_users_repo/reponame (fetch)
other_users_repo    https://bitbucket.com/other_users_repo/reponame (push)

Добавление удаленных репозиториев

Команда git remote add используется для создания записи о новом подключении к удаленному репозиторию. После добавления удаленного репозитория имя можно использовать в качестве удобного ярлыка для адреса в других командах Git. Дополнительные сведения о принятом синтаксисе URL-адресов см. в разделе «URL-адреса репозиториев» ниже. Эта команда создаст новую запись в файле ./.git/config репозитория. Ниже приведен пример обновления этого файла конфигурации.

$ git remote add fake_test https://bitbucket.com/upstream_user/reponame.git; [remote "remote_test"] 
   url = https://bitbucket.com/upstream_user/reponame.git 
   fetch = +refs/heads/*:refs/remotes/remote_test/*

Проверка удаленного репозитория

Для получения подробного вывода о конфигурации удаленного репозитория к команде git remote можно добавить подкоманду show. Вывод будет содержать список веток, связанных с удаленным репозиторием, а также конечных точек, подключенных для извлечения (fetch) и отправки (push).

git remote show upstream
* remote upstream
   Fetch URL: https://bitbucket.com/upstream_user/reponame.git
   Push URL: https://bitbucket.com/upstream_user/reponame.git
   HEAD branch: main
   Remote branches:
      main tracked
      simd-deprecated tracked
      tutorial tracked
   Local ref configured for 'git push':
      main pushes to main (fast-forwardable)

Получение и извлечение данных из удаленных репозиториев Git

Отправка данных в удаленные репозитории Git

Для записи данных в удаленный репозиторий используется команда git push.

git push <remote-name> <branch-name>

В этом примере состояние локальной ветки <branch-name> передается в удаленный репозиторий, обозначенный как <remote-name>.

Переименование и удаление удаленных репозиториев

git remote rename <old-name> <new-name>

Принцип работы команды git remote rename очевиден из названия. В результате ее выполнения происходит переименование удаленного подключения с имени <old-name> на <new-name>. Кроме того, изменяется контент ./.git/config для переименования записи для удаленного репозитория.

git remote rm <name>

Команда git remote rm удаляет подключение к удаленному репозиторию, обозначенному с помощью параметра <name>. Чтобы показать работу команды, «отменим» добавление из последнего примера. После выполнения команды git remote rm remote_test мы увидим, что запись [remote "remote_test"] удалена из контента ./.git/config.