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» — и он точно знает, какую команду выполнить.

Удалённый репозиторий origin
Выполнение git clone автоматически создаёт удалённый репозиторий с именем origin, указывающий на репозиторий, который вы клонировали. По соглашению origin — это «ваша» каноническая копия на сервере, в которую вы отправляете изменения и из которой получаете их ежедневно. В этом имени нет ничего особенного; это просто значение по умолчанию, которое выбирает Git, и вы можете переименовать или удалить его, как любой другой удалённый репозиторий.
Часто используется второй удалённый репозиторий — upstream. Когда вы делаете форк проекта, origin указывает на ваш форк, а upstream — на исходный репозиторий, что позволяет получать новые изменения из проекта и при этом отправлять свою работу в форк.
URL репозиториев
URL удалённого репозитория сообщает Git, где находится репозиторий и какой транспортный протокол использовать. Чаще всего встречаются два протокола: HTTPS и SSH.
HTTPS — самый простой в настройке и работает через файрволы и прокси. Публичные репозитории можно клонировать по HTTPS без учётных данных; для приватных репозиториев или при отправке изменений Git запросит имя пользователя и персональный токен доступа, которые обычно кэшируются вспомогательным менеджером учётных данных.
https://host/path/to/repo.gitSSH выполняет аутентификацию с помощью пары ключей вместо пароля, что удобно для многократных отправок после регистрации ключа у хостинг-провайдера. Поддерживаются две эквивалентные формы — полный URL ssh:// и более короткий синтаксис в стиле SCP:
ssh://user@host/path/to/repo.gituser@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.