Олег Марков
Добавление удаленного репозитория в Git с помощью git remote add
Введение
Добавление удаленного репозитория — один из первых шагов при работе с Git в команде. Как только вы инициализировали локальный репозиторий или склонировали существующий, следующим логичным действием часто становится привязка его к удаленному серверу: GitHub, GitLab, Bitbucket или внутреннему корпоративному Git-серверу.
Команда git remote add как раз и отвечает за это. С её помощью вы:
- подключаете удаленный репозиторий к уже существующему локальному;
- даете этому удаленному адресу удобное короткое имя, например
origin; - настраиваете сразу несколько удаленных репозиториев для одного проекта;
- подготавливаете почву для
git push,git pullиgit fetch.
Смотрите, я покажу вам, как именно работает git remote add, какие варианты синтаксиса стоит знать, как не запутаться с именами удаленных репозиториев и какие проблемы чаще всего возникают при её использовании.
Что такое удаленный репозиторий и remote в Git
Прежде чем разбирать саму команду, важно понять два термина: «удаленный репозиторий» и «remote».
Удаленный репозиторий
Удаленный репозиторий — это версия вашего Git-репозитория, которая хранится не на вашем локальном компьютере, а:
- на Git-сервисе (GitHub, GitLab, Bitbucket);
- на отдельном сервере в компании (например, внутренний GitLab или bare-репозиторий по SSH);
- на другом компьютере, доступном по сети.
По сути, это просто репозиторий, к которому Git может обратиться по URL: https://..., ssh://... или через короткий SSH-путь вида git@server:group/project.git.
Remote в Git
Remote (удаленный) в контексте Git — это запись в настройках вашего локального репозитория, которая:
- связывает краткое имя (например,
origin,upstream) с конкретным URL; - хранится в конфигурации репозитория;
- используется командами
git push,git pull,git fetchи другими.
Проще говоря, remote — это «контакт в адресной книге». Вы не каждый раз указываете полный URL, а обращаетесь по короткому имени.
Базовый синтаксис git remote add
Давайте сразу посмотрим, как выглядит базовая форма команды.
git remote add <имя-удаленного-репозитория> <url>
# <имя-удаленного-репозитория> - короткое имя (обычно origin)
# <url> - адрес удаленного репозитория (HTTPS или SSH)
Пример:
git remote add origin https://github.com/user/project.git
# Добавляем remote с именем origin
# и связываем его с репозиторием на GitHub
После этой команды ваш локальный репозиторий «знает», куда отправлять изменения при git push (если вы настроите ветки) и откуда их получать.
Типичные сценарии использования git remote add
Сценарий 1. У вас уже есть локальный репозиторий без удаленного
Частая ситуация: вы начали проект локально, сделали несколько коммитов, а потом решили выложить его на GitHub или другой сервер.
Пошагово это будет выглядеть так:
- Инициализируете репозиторий (если ещё не сделали):
git init
# Создаем новый Git-репозиторий в текущей директории
- Добавляете файлы и коммитите:
git add .
# Добавляем все файлы в индекс
git commit -m "Initial commit"
# Фиксируем первый коммит
Создаете пустой репозиторий на GitHub или другом сервисе (без README или с ним — не критично, главное понимать состояние истории).
Добавляете удаленный репозиторий:
git remote add origin git@github.com:username/project.git
# Связываем локальный репозиторий с удаленным по SSH
- Проверяете, что remote добавился:
git remote -v
# Показывает список удаленных репозиториев с URL
- Отправляете изменения:
git push -u origin main
# Отправляем локальную ветку main на origin
# и устанавливаем отслеживание (флаг -u)
Сценарий 2. Требуется добавить второй удаленный репозиторий
Иногда нужно, чтобы один и тот же код хранился, например, и на GitHub, и на GitLab. Тогда вы можете настроить несколько remotes.
git remote add origin git@github.com:username/project.git
# Первый удаленный репозиторий - GitHub
git remote add gitlab git@gitlab.com:username/project.git
# Второй удаленный репозиторий - GitLab
Теперь вы можете по выбору отправлять изменения:
git push origin main
# Отправляем на GitHub
git push gitlab main
# Отправляем на GitLab
Сценарий 3. Подключение upstream к форку
Когда вы делаете fork репозитория, ваш удаленный origin указывает на ваш форк. Но часто нужно следить за оригинальным репозиторием (откуда вы сделали форк). В таком случае добавляют второй remote — upstream.
git remote add origin git@github.com:my-user/my-fork.git
# Ваш форк
git remote add upstream git@github.com:original-author/original-project.git
# Оригинальный репозиторий
Теперь вы можете подтягивать изменения из оригинального репозитория:
git fetch upstream
# Забираем новые коммиты из оригинального репозитория
git merge upstream/main
# Сливаем их в свою ветку main
Виды URL для git remote add
Git поддерживает несколько типов URL. Давайте разберем основные, с которыми вы столкнетесь на практике.
HTTPS URL
Самый понятный и привычный формат:
git remote add origin https://github.com/user/project.git
# Подключаем удаленный репозиторий по HTTPS
Особенности:
- при
git pushGit может спрашивать логин и пароль или токен доступа; - удобно, когда SSH недоступен;
- требует настройки персонального токена (PAT), если используется GitHub/GitLab и включена двухфакторная аутентификация.
SSH URL (рекомендуемый для разработки)
SSH-формат чаще используется в разработке, потому что не нужно вводить логин/пароль при каждом пуше.
git remote add origin git@github.com:user/project.git
# Подключение по SSH с использованием ключа
Особенности:
- работает через SSH-ключи;
- быстрее в повседневной работе (пуш и фетч не требуют ручного ввода пароля);
- удобно для автоматизации (CI/CD, серверы).
Локальные и файловые URL
Иногда Git используют для обмена кодом между директориями на одном сервере.
git remote add backup /srv/git/project.git
# Локальный путь до "bare" репозитория
git remote add shared file:///srv/git/shared/project.git
# Явный файловый URL
Это полезно, когда вы настраиваете внутренний Git-сервер без веб-интерфейса или делаете резервную копию.
Как проверить, что удаленный репозиторий добавлен
После выполнения git remote add вы почти всегда хотите убедиться, что всё настроено корректно.
Команда git remote -v
git remote -v
# Показывает список удаленных репозиториев с URL для fetch и push
Пример вывода:
origin git@github.com:user/project.git (fetch)
origin git@github.com:user/project.git (push)
upstream git@github.com:original-author/project.git (fetch)
upstream git@github.com:original-author/project.git (push)
Здесь вы видите:
- имена remotes (
origin,upstream); - URL;
- тип операции (
fetchилиpush).
Ограничения и поведение git remote add
Важно понимать несколько моментов, чтобы не столкнуться с ошибками.
Нельзя добавить remote с уже существующим именем
Если вы попробуете добавить remote с именем, которое уже используется, Git выдаст ошибку.
git remote add origin git@github.com:user/project.git
# Допустим, origin уже существует
# Git ответит примерно так:
# fatal: remote origin already exists.
В такой ситуации у вас несколько вариантов:
- Переименовать существующий remote.
- Удалить существующий remote и добавить заново.
- Использовать другое имя.
Давайте разберем эти варианты подробнее.
Управление удаленными репозиториями после git remote add
Добавить remote — это только первый шаг. Часто приходится менять адрес, переименовывать или удалять запись.
Как переименовать удаленный репозиторий
Допустим, при клонировании вы получили remote origin, но хотите использовать другое имя (или наоборот).
git remote rename oldname newname
# Переименовываем remote oldname в newname
Пример:
git remote rename origin github
# Теперь вместо origin у вас есть github
Проверьте:
git remote -v
# Убедитесь, что новое имя отображается корректно
Как изменить URL существующего remote
Если адрес репозитория изменился (например, вы перенесли проект в другую организацию или поменяли протокол с HTTPS на SSH), не нужно добавлять новый remote, достаточно обновить URL.
Используем команду git remote set-url:
git remote set-url origin git@github.com:user/project.git
# Меняем URL удаленного репозитория origin
Пример смены HTTPS на SSH:
git remote set-url origin git@github.com:user/project.git
# Раньше был https-URL, теперь SSH
Вы можете отдельно менять URL для fetch и push, но это уже более продвинутый сценарий.
Как удалить удаленный репозиторий
Если remote больше не нужен (например, вы перестали использовать GitLab и остались только на GitHub), его можно удалить:
git remote remove gitlab
# Удаляем remote с именем gitlab
Альтернативная форма (устаревающая, но всё ещё поддерживаемая):
git remote rm gitlab
# То же самое, что remove
После этого команда git remote -v больше не будет показывать этот remote.
Как настроить несколько удаленных репозиториев для одного проекта
Иногда возникает потребность хранить один и тот же код в нескольких местах:
- «боевой» репозиторий на внутреннем сервере;
- зеркальный репозиторий на GitHub;
- отдельный репозиторий для open-source версии.
Смотрите, как это можно организовать.
git remote add origin git@internal.example.com:team/project.git
# Основной внутренний сервер
git remote add github git@github.com:company/project.git
# Зеркало на GitHub
Теперь вы сами решаете, куда пушить:
git push origin main
# Отправляем на внутренний сервер
git push github main
# Отправляем на GitHub
При этом git pull по умолчанию использует тот remote, который настроен как «отслеживаемый» для вашей ветки. Обычно это origin, но можно поменять настройки ветки.
Взаимодействие git remote add с ветками и push/pull
Важно понимать, что git remote add сам по себе не настраивает пуш для веток. Он только создает «контакт» с URL. Остальное вы делаете вручную.
Связь ветки с remote при первом push
Часто вы видите команду:
git push -u origin main
# Флаг -u настраивает отслеживание ветки
Флаг -u означает: «сделать ветку main отслеживаемой от origin/main». После этого при простом git push или git pull Git уже знает, с каким remote и какой веткой работать.
Проверка связи ветки и remote
Посмотрите настройки текущей ветки:
git branch -vv
# Показывает локальные ветки и их "upstream" (отслеживаемые ветки)
Пример вывода:
* main 0a1b2c3 [origin/main] Initial commit
# Текущая ветка main отслеживает origin/main
Практические примеры по шагам
Давайте разберем несколько конкретных сценариев от начала до конца.
Пример 1. Новый локальный проект и GitHub
- Создаете папку и инициализируете Git:
mkdir my-project
cd my-project
git init
# Инициализация репозитория
- Создаете файл и делаете первый коммит:
echo "Hello" > readme.txt
# Создаем простой файл
git add readme.txt
# Добавляем файл в индекс
git commit -m "Add readme"
# Фиксируем изменения
На GitHub создаете новый пустой репозиторий
my-project.Добавляете remote:
git remote add origin git@github.com:username/my-project.git
# Привязываем локальный репозиторий к GitHub
- Отправляете изменения:
git push -u origin main
# Отправляем ветку main и настраиваем отслеживание
Теперь git push и git pull будут работать без указания имени remote и ветки.
Пример 2. Существующий репозиторий и переход с HTTPS на SSH
Предположим, вы сначала настроили remote по HTTPS, а потом настроили SSH-ключи и хотите переключиться.
- Проверяем текущий remote:
git remote -v
# Допустим, видим:
# origin https://github.com/user/project.git (fetch)
# origin https://github.com/user/project.git (push)
- Меняем URL на SSH:
git remote set-url origin git@github.com:user/project.git
# Устанавливаем новый SSH-адрес
- Проверяем:
git remote -v
# Теперь должно быть:
# origin git@github.com:user/project.git (fetch)
# origin git@github.com:user/project.git (push)
Теперь пуш будет идти по SSH, и система аутентификации может использовать ключи без пароля (или с паролем к ключу, если он установлен).
Важные детали, о которых часто забывают
Имена remote — это просто ярлыки
Названия origin, upstream, github, gitlab — это всего лишь договоренности. Git не заставляет вас использовать именно эти имена. Вы можете написать:
git remote add server git@my-server:repos/main.git
# Имя server - это ваша договоренность
Главное — чтобы вам было удобно и понятно.
Один remote может обслуживать несколько веток
Вам не нужно добавлять новый remote на каждую ветку. Один remote (origin) может содержать:
origin/mainorigin/devorigin/feature/x- и так далее.
Вы просто пушите разные локальные ветки на один и тот же remote:
git push origin dev
# Отправляем ветку dev в origin
git remote add не проверяет существование репозитория по URL
Когда вы выполняете:
git remote add origin git@github.com:user/non-existent.git
Git не проверяет, существует ли этот репозиторий на сервере. Проверка произойдет только при первой попытке git fetch или git push. Если адрес неверен или у вас нет прав, вы увидите ошибку уже при этих командах.
Типичные ошибки и способы их исправить
Ошибка: remote origin already exists
Сообщение:
fatal: remote origin already exists.
Это значит, что remote с именем origin уже создан. Что делать:
- Посмотреть существующие remotes:
git remote -v
# Убедитесь, какие remotes уже настроены
- Если вы хотите заменить существующий URL — используйте
git remote set-url:
git remote set-url origin git@github.com:new-user/new-project.git
# Меняем URL для уже существующего origin
- Если текущий
originвообще не нужен — удалите и добавьте заново:
git remote remove origin
# Удаляем старый origin
git remote add origin git@github.com:new-user/new-project.git
# Добавляем новый origin
Ошибка: Permission denied (publickey) при первом push
Вы уже добавили remote по SSH, но первая попытка git push выдает:
Permission denied (publickey).
fatal: Could not read from remote repository.
Это не проблема git remote add как таковой, но она напрямую связана с тем, как вы добавляли URL. Нужно:
- Проверить наличие SSH-ключа:
ls ~/.ssh
# Обычно ключи называются id_rsa, id_ed25519 и т.п.
- Если ключа нет — создать его:
ssh-keygen -t ed25519 -C "your_email@example.com"
# Создаем новый SSH-ключ
# Следуйте подсказкам команды
- Добавить открытый ключ на GitHub, GitLab или другой сервис:
cat ~/.ssh/id_ed25519.pub
# Копируем содержимое и вставляем в настройках SSH-ключей на сервисе
- Повторить
git push.
Ошибка: repository not found
Сообщение:
remote: Repository not found.
fatal: repository 'https://github.com/user/project.git/' not found
Чаще всего это означает:
- у вас нет прав на доступ к этому репозиторию;
- репозиторий действительно не существует;
- или в URL опечатка.
Проверьте URL:
git remote -v
# Сравните URL с тем, что показывает GitHub или другой сервис
Если нужно — обновите:
git remote set-url origin правильный-URL
# Замените на правильный адрес
Как удалить и заново настроить удаленный репозиторий
Иногда проще «начать заново» в части remotes.
- Удаляем все ненужные remotes:
git remote remove origin
git remote remove upstream
# Удаляем ненужные записи
- Добавляем заново корректные:
git remote add origin git@github.com:new-user/new-project.git
# Настраиваем новый origin
- Проверяем:
git remote -v
# Убеждаемся, что список корректный
Этот подход особенно полезен, если вы перенесли проект в другую организацию или поменяли Git-сервер.
Короткое резюме
Команда git remote add:
- создает запись в вашем локальном репозитории, связывающую короткое имя (например,
origin) с URL; - не проверяет существование репозитория немедленно, а только запоминает адрес;
- является основой для дальнейшего использования
git push,git pull,git fetchи работы с несколькими удаленными репозиториями.
Ключевые моменты, о которых стоит помнить:
- имя remote — это просто ярлык, но принято использовать
originиupstream; - для изменения URL используйте
git remote set-url, а неgit remote addповторно; - удаление remote делается через
git remote remove <name>; - несколько remotes в одном проекте — нормальная и часто полезная практика.
Теперь вы видите, что git remote add — не сложная, но крайне важная команда, без которой нормальная работа с удаленными репозиториями в Git практически невозможна.
Частозадаваемые технические вопросы по теме и ответы
Вопрос 1. Как сделать так, чтобы по умолчанию git push отправлял на не origin, а другой remote
Используйте настройку pushDefault:
git config remote.pushDefault github
# Теперь без указания remote git push будет отправлять на github
Проверьте:
git config remote.pushDefault
# Должно вывести github
Вопрос 2. Как задать разные URL для fetch и push у одного remote
Иногда нужно забирать изменения из одного репозитория, а отправлять в другой. Сделайте так:
git remote set-url origin git@github.com:user/read-only.git --push
# URL для push
git remote set-url origin git@github.com:user/write-only.git --add
# URL для fetch (по умолчанию, если без --push)
Проверьте через git remote -v.
Вопрос 3. Как узнать, в каком именно файле Git хранит информацию о remotes
Обычно настройки remote хранятся в .git/config внутри репозитория. Посмотреть:
cat .git/config
# В секции [remote "origin"] находятся URL и другие настройки
Не редактируйте этот файл без необходимости, лучше используйте git-команды.
Вопрос 4. Можно ли с помощью git remote add добавить remote только для чтения
Сам remote не бывает «только для чтения», всё зависит от прав на сервере и типа URL. Для read-only доступа используйте HTTPS-URL без токена с правом записи или SSH-ключ с ограниченными правами. Если у учетной записи нет прав на push, репозиторий фактически будет read-only.
Вопрос 5. Как клонировать репозиторий без origin, а потом добавить remote с другим именем
Сначала клонируйте с опцией --no-checkout и удалите origin, либо проще:
git clone --origin temp git@github.com:user/project.git
# Клонируем с временным именем temp
git remote rename temp myremote
# Переименовываем remote в myremote
Теперь у вас есть репозиторий с remote под нужным именем.
Постройте личный план изучения Git до уровня Middle — бесплатно!
Git — часть карты развития Frontend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Git
Лучшие курсы по теме

Основы Git
Антон Ларичев
TypeScript с нуля
Антон Ларичев