W3docs

git remote

Узнайте, как создавать и настраивать удалённые репозитории Git: добавление, просмотр, получение данных, отправка, переименование и удаление.

Что делает git remote

Удалённый репозиторий (remote) — это именованная ссылка на другую копию вашего репозитория, обычно размещённую на сервере, таком как GitHub, GitLab или Bitbucket. Команда git remote создаёт, перечисляет, переименовывает и удаляет такие соединения. Она не передаёт коммиты сама по себе, а лишь хранит короткие запоминающиеся имена, указывающие на URL репозиториев, чтобы команды, которые действительно перемещают данные — git fetch, git pull и git push — могли ссылаться на них.

Думайте об удалённом репозитории как о закладке. Вместо того чтобы каждый раз вводить git push https://github.com/acme/app.git main, вы один раз сохраняете URL под именем origin и выполняете git push origin main. Соответствие имён и URL хранится в файле .git/config вашего репозитория, поэтому у каждого клона есть собственный список удалённых репозиториев.

На диаграмме ниже показаны два удалённых соединения из локального репозитория: одно — с центральным репозиторием, другое — с репозиторием другого разработчика. Поскольку имена являются общепринятыми, вы можете сказать коллеге «сделай pull из upstream» — и он точно знает, какую команду выполнить.

git remote

Удалённый репозиторий origin

Выполнение git clone автоматически создаёт удалённый репозиторий с именем origin, указывающий на репозиторий, который вы клонировали. По соглашению origin — это «ваша» каноническая копия на сервере, в которую вы отправляете изменения и из которой получаете их ежедневно. В этом имени нет ничего особенного; это просто значение по умолчанию, которое выбирает Git, и вы можете переименовать или удалить его, как любой другой удалённый репозиторий.

Часто используется второй удалённый репозиторий — upstream. Когда вы делаете форк проекта, origin указывает на ваш форк, а upstream — на исходный репозиторий, что позволяет получать новые изменения из проекта и при этом отправлять свою работу в форк.

URL репозиториев

URL удалённого репозитория сообщает Git, где находится репозиторий и какой транспортный протокол использовать. Чаще всего встречаются два протокола: HTTPS и SSH.

HTTPS — самый простой в настройке и работает через файрволы и прокси. Публичные репозитории можно клонировать по HTTPS без учётных данных; для приватных репозиториев или при отправке изменений Git запросит имя пользователя и персональный токен доступа, которые обычно кэшируются вспомогательным менеджером учётных данных.

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

SSH выполняет аутентификацию с помощью пары ключей вместо пароля, что удобно для многократных отправок после регистрации ключа у хостинг-провайдера. Поддерживаются две эквивалентные формы — полный URL ssh:// и более короткий синтаксис в стиле SCP:

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

Запоминать формат URL не обязательно — вы просто копируете его из кнопки «Clone» на сайте хостинг-провайдера. Команда git remote сохраняет ту форму, которую вы использовали.

Подкоманды git remote

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

git remote add

Регистрирует новый удалённый репозиторий с именем <name>, указывающий на <url>.

git remote add <name> <url>

Два полезных параметра:

  • -f выполняет git fetch <name> сразу после создания удалённого репозитория, чтобы его ветки были загружены немедленно.
  • --tags получает данные из удалённого репозитория и дополнительно импортирует все его теги.

git remote rename

Переименовывает удалённый репозиторий с <old> на <new>, обновляя ветки слежения и связанные настройки.

git remote rename <old> <new>

git remote remove

Удаляет соединение с именем <name> вместе с его ветками слежения и конфигурацией. Команда git remote rm — устаревший псевдоним той же команды.

git remote remove <name>

git remote set-url

Изменяет URL, на который указывает существующий удалённый репозиторий, — например, при переходе с HTTPS на SSH.

git remote set-url <name> <new-url>

git remote get-url

Выводит URL удалённого репозитория. Добавьте --push, чтобы увидеть именно URL для отправки изменений, или --all, чтобы перечислить все настроенные URL.

git remote get-url <name>

git remote show

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

git remote show <name>

git remote prune

Удаляет локальные ветки слежения для <name>, соответствующие ветки которых были удалены на сервере. Используйте --dry-run, чтобы узнать, что было бы удалено, не выполняя фактическое удаление.

git remote prune <name>
Примечание
git remote prune удаляет только устаревшие ссылки на ветки слежения (например, origin/old-feature); она никогда не затрагивает ваши локальные ветки и никакие данные на удалённом репозитории.

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

Запуск git remote без аргументов выводит имя каждого настроенного удалённого репозитория, по одному в строке:

git remote
origin
upstream
other_repo

Добавьте флаг -v (verbose), чтобы также увидеть URL для получения и отправки данных каждого удалённого репозитория:

git remote -v
origin      [email protected]:origin_user/reponame.git (fetch)
origin      [email protected]:origin_user/reponame.git (push)
upstream    https://example.com/upstream_user/reponame.git (fetch)
upstream    https://example.com/upstream_user/reponame.git (push)
other_repo  https://example.com/other_repo/reponame.git (fetch)
other_repo  https://example.com/other_repo/reponame.git (push)

У удалённого репозитория могут быть разные URL для получения и отправки данных — это удобно, например, когда вы получаете данные с быстрого зеркала, а отправляете на канонический сервер.

Добавление удалённого репозитория

Чтобы начать совместную работу с другим репозиторием, зарегистрируйте его с помощью git remote add. Выбранное вами имя станет ярлыком, который можно использовать в командах fetch, pull и push:

git remote add upstream https://example.com/upstream_user/reponame.git

Подключение к репозиториям других разработчиков позволяет организовать совместную работу вне центрального репозитория. Например, если коллега поддерживает общедоступный репозиторий по адресу dev.example.com/tom.git, добавьте его следующим образом, а затем получите его работу:

git remote add tom https://dev.example.com/tom.git
git fetch tom

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

Подкоманда show обращается к удалённому репозиторию и выводит информацию о его ветках и конфигурации слежения — это удобно, когда нужно убедиться, какая ветка будет обновлена при отправке или получении данных:

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

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

Настройка удалённого репозитория — это лишь подготовительный шаг. После этого вы передаёте его имя командам, которые непосредственно перемещают коммиты:

  • git fetch <remote> загружает новые коммиты из удалённого репозитория в ваши ветки слежения, не изменяя рабочие файлы.
  • git pull <remote> <branch> получает данные, а затем выполняет слияние (или перебазирование) изменений в текущую ветку.
  • git push <remote> <branch> отправляет ваши локальные коммиты на удалённый репозиторий.
git push <remote-name> <branch-name>

Например, чтобы опубликовать ветку main в origin:

git push origin main

Если вы хотите подробнее узнать, где хранятся эти имена и URL, обратитесь к разделу git config, в котором описан файл .git/config, редактируемый командой git remote.

Практика

Практика
Какие утверждения о команде `git remote` являются правильными?
Какие утверждения о команде `git remote` являются правильными?
Was this page helpful?