Гид по технологиям

Git: несколько удалённых репозиториев и как их настроить

5 min read VCS Обновлено 10 Dec 2025
Git: несколько удалённых репозиториев
Git: несколько удалённых репозиториев

Логотип Git: оранжево-красный значок ветвления

Быстрые ссылки

  • Remotes, Explained

  • Setting Up Multiple Remotes

git можно настроить так, чтобы он подтягивал и пушил изменения в несколько мест одновременно. Это даёт возможность хранить код на двух платформах и при этом иметь одну локальную копию. Ниже — подробная инструкция и рекомендации.

Что такое remote

Remote — это URL-адрес репозитория, откуда ваш локальный Git получает изменения и куда может отправлять свои коммиты. Локальный репозиторий полностью принадлежит вам; он не изменится, пока кто-то не запушит изменения в удалённый репозиторий и вы их не зафетчите/не вмерджите.

По умолчанию при клонировании репозитория создаётся remote с именем origin. Список настроенных remotes можно увидеть командой:

git remote -v

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

Почему может потребоваться несколько remote? Один из классических примеров — AWS CodeCommit. Это хостинг git-репозиториев, интегрированный с EC2 и другими сервисами AWS для автоматического деплоя. Но CodeCommit часто менее удобен в повседневной разработке по сравнению с более узкоспециализированными провайдерами (GitHub, GitLab, Bitbucket) и их CI/CD-интеграциями. Решение: вести разработку в основном репозитории, а отдельным push запускать деплой в CodeCommit.

Важно понимать: remote — это просто точка синхронизации. Вы можете клонировать любой endpoint и переключиться на другой remote без сложных последствий, если соблюдаете дисциплину ветвления и слияния.

Как добавить второй remote

Добавление другого удалённого репозитория выполняется так же, как при первоначальной настройке origin, но даём ему другое имя:

git remote add  

Пример:

git remote add second git@git-codecommit.us-east-1.amazonaws.com:v1/repos/my-repo

Чтобы запушить ветку master во второй remote:

git push second master

Или сделать second веткой с upstream по умолчанию для текущей ветки:

git push --set-upstream second master

Это простейшая схема, но она требует либо передачи имени удалённого репозитория в каждой команде, либо смены upstream каждый раз.

Управление деплоем через отдельную ветку

Часто удобнее создать отдельную ветку для деплоя, чтобы не смешивать рабочие ветки разработчиков с веткой, которую смотрит система деплоя. Пример рабочего процесса:

  1. Создать ветку для деплоя локально:
git checkout -b deployment
  1. Добавить удалённый репозиторий для деплоя (если ещё не добавлен):
git remote add deployment 
  1. Подтянуть/фетчнуть нужную ветку из remote для проверки истории:
git fetch deployment master
  1. Назначить upstream для текущей ветки так, чтобы git знал, куда пушить по умолчанию:
git branch --set-upstream-to=deployment/master

Теперь git push с активной веткой deployment отправит изменения в remote deployment. Повторите аналогичный процесс для других веток по необходимости.

Помните: это локальная конфигурация. Если вы запушите ветку deployment в основной репозиторий, у других участников не появится автоматически настроенный remote deployment — им нужно будет повторить локальную настройку.

Когда такая схема работает плохо (примеры проблем)

  • Если вы делаете двунаправленный обмен между двумя репозиториями (пуш и пул), могут возникнуть неожиданные конфликты и рассинхронизация истории.
  • Если деплойный remote поддерживает другую политику ветвления (например, защищённые ветки), простой push может быть запрещён.
  • Если команда не согласована и все пушат в оба репозитория вручную, это приведёт к ошибкам и потерям времени.

В большинстве случаев лучше, чтобы второй remote использовался только для push (one-way), а разработка велась через основной remote.

Альтернативные подходы

  • Настроить CI/CD в основном репозитории, который сам пушит артефакты или код в CodeCommit/иную цель при успешном прохождении тестов.
  • Использовать mirror репозиторий: настроить на сервере периодическую задачу, которая зеркалит основной репозиторий во второй (git push –mirror).
  • Использовать хуки (server-side hooks) или скрипты в CI для копирования тэгов и веток.

Выбор зависит от требований безопасности, разрешений и сложности инфраструктуры.

Мини‑методология для безопасной настройки двух remote

  1. Договоритесь об одном основном репозитории для разработки.
  2. Создайте отдельную ветку для деплоя (например, deployment).
  3. Добавьте remote для деплоя локально и назначьте upstream для ветки deployment.
  4. Настройте права доступа на стороне деплоя (только пуш).
  5. Документируйте процесс в README или в internal wiki.
  6. Автоматизируйте через CI, если возможно.

Чек-лист для ролей

  • Разработчик:

    • Создал ветку deployment локально и назначил upstream.
    • Понимает, что второй remote — только для пуша.
    • Не мёрджит чужие изменения в ветку деплоя без проверки.
  • DevOps/инженер по релизам:

    • Настроил права доступа на стороне CodeCommit/деплойного remote.
    • Проверил, что автоматический пайплайн запускается при пуше.
    • Обеспечил мониторинг и rollback-процедуры.

Decision flow — куда пушить?

flowchart TD
  A[Нужно запушить изменения?] --> B{Это релиз/деплойный код?}
  B -- Нет --> C[Пуш в origin 'основной репозиторий']
  B -- Да --> D[Пуш в ветку deployment]
  D --> E{CI/CD настроен?}
  E -- Да --> F[CI автоматически деплоит в окружение]
  E -- Нет --> G[Пуш в deployment и вручную триггер деплоя]

1‑строчный глоссарий

  • remote — URL/ссылка на удалённый репозиторий; origin — стандартное имя при клонировании.

Риски и смягчения

  • Риск: рассинхронизация историй между репозиториями. Смягчение: использовать односторонний push; избегать pull из второго remote.
  • Риск: случайный пуш в защищённую ветку. Смягчение: настроить права и защищённые ветки на стороне сервиса.

Примеры команд (шпаргалка)

# Показать remotes
git remote -v

# Добавить новый remote
git remote add second 

# Пуш в конкретный remote
git push second master

# Создать локальную ветку для деплоя
git checkout -b deployment

# Установить upstream для ветки
git branch --set-upstream-to=deployment/master

Итог

Множественные remotes — гибкий инструмент. Он полезен, когда нужно поддерживать зеркальную копию репозитория для деплоя или бэкапа. Лучшие практики: использовать отдельную ветку для деплоя, назначать upstream локально и предпочитать односторонний push, чтобы избежать конфликтов. Автоматизация через CI делает процесс более надёжным и воспроизводимым.

Важно: документируйте процесс внутри команды и контролируйте права доступа на стороне удалённых сервисов.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как безопасно очищать ссылки
Безопасность

Как безопасно очищать ссылки

Добавление игр в список желаемого — PlayStation App
Игры

Добавление игр в список желаемого — PlayStation App

Как настроить док на Mac — советы и трюки
macOS

Как настроить док на Mac — советы и трюки

YouTube PiP на Android — включение и использование
How-to

YouTube PiP на Android — включение и использование

Исправить синий экран BSOD в Windows 11
Windows

Исправить синий экран BSOD в Windows 11

Отключить Top Results в Microsoft Outlook
Microsoft Outlook

Отключить Top Results в Microsoft Outlook