Remote - это просто имя для URL. Внутри .git/config под каждый
remote лежит секция:
[remote "origin"]
url = git@github.com:foo/bar.git
fetch = +refs/heads/*:refs/remotes/origin/*
Команда git remote смотрит и редактирует этот список.
Основные команды
git remote # список имён
git remote -v # с URL'ами и направлениями
git remote show origin # детальная инфа: ветки, tracking
git remote add upstream <url> # добавить
git remote rename origin foo # переименовать
git remote remove upstream # удалить
git remote set-url origin <new> # сменить URL без re-clone
Типичный вывод git remote -v:
origin git@github.com:me/bar.git (fetch)
origin git@github.com:me/bar.git (push)
upstream git@github.com:original/bar.git (fetch)
upstream git@github.com:original/bar.git (push)
Два направления - fetch и push - могут указывать на разные URL'ы (редкий случай: тянуть из одного, пушить в другой). Обычно совпадают.
Почему «origin»
Просто имя. Git клонирует с origin по дефолту, потому что так
принято. Хочешь - переименовывай:
git remote rename origin upstream
В fork-сценарии (см. fork-vs-clone) часто:
origin- твой fork (me/repo),upstream- оригинальный репо (original/repo).
Подробнее в upstream-vs-origin.
Сменить URL без re-clone
Сценарий: репозиторий переехал с GitHub на GitLab. Не нужно клонировать заново:
git remote set-url origin git@gitlab.com:foo/bar.git
git fetch
Всё работает дальше, история на месте.
Push URL и Fetch URL раздельно
Иногда нужно тянуть из публичного зеркала, а пушить в приватный:
git remote set-url origin https://github.com/foo/bar.git
git remote set-url --push origin git@gitlab.com:foo/bar.git
Теперь git fetch пойдёт на GitHub, git push - на GitLab. Это
редкий случай, но иногда полезно при миграциях.
Подводные камни
git remote addНЕ делает fetch автоматически. После добавления нужноgit fetch <name>, иначе ветки нового remote не появятся.- URL хранится в
.git/configбез шифрования. Если URL содержит пароль (https://user:password@...) - он лежит plaintext. Лучше через SSH или credential helper. - Имена remote локальные. У тебя
upstreamможет указывать на одно, у коллеги на другое. Это нормально, но при общении говорите URL.