ZaLinux.ru

Как использовать git с несколькими удалёнными репозиториями

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

Что такое remote

«Remote» для ветки — это URL-адрес, по которому ваш локальный репозиторий git извлекает изменения. Ваш локальный репозиторий git полностью принадлежит вам — на него не влияет код других людей, пока они не отправят свои коммиты на удалённый компьютер. Если вы все используете один и тот же remote, то всё синхронизируется, но remote — это всего лишь конечная точка. Вы можете клонировать эту конечную точку и без особых проблем переключиться на новый remote.

Каждый раз, когда вы клонируете новый репозиторий, в качестве remote по умолчанию устанавливается «origin». Вы можете найти remote для любого репозитория git, выполнив:

git remote -v

Вероятно, эта команда будет отображать URL-адрес вашего основного репозитория на GitHub или в другом сервисе, который вы используете. Если у вас несколько remote, они тоже будут здесь отображаться.

Но то, что origin является remote по умолчанию, не означает, что вы ограничены одним им. Зачем вам два remote? Что ж, хороший вариант использования — это AWS CodeCommit. Это репозиторий git, который имеет множество интеграций с их вычислительной платформой EC2, что позволяет автоматизировать развёртывание кода на ваших серверах непосредственно из системы управления версиями.

Однако CodeCommit довольно неуклюж по сравнению с более специализированными поставщиками git, такими как GitHub, GitLab и BitBucket, и не имеет такой интеграции CI/CD, которая делает этих поставщиков отличными. Итак, вы столкнулись с дилеммой: использовать CodeCommit в качестве решения git по умолчанию или самостоятельно создать конвейер автоматического развёртывания кода.

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

Настройка нескольких remote

На самом деле использовать git таким способом довольно просто. Вы добавляете remote так же, как и существующую папку, за исключением того, что вместо добавления «исходного» remote вы даёте ему другое имя.

git remote add <ИМЯ> <URL>

Затем, когда вы хотите push на второй remote, добавьте удалённое имя и ветвь к своей команде push:

git push second master

Или переключите remote по умолчанию с помощью --set-upstream:

git push --set-upstream second master

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

На самом деле, если вы используете два remote, вам, вероятно, понадобится лучший способ управления отправкой кода на второй remote. Лучший способ справиться с этим в git — создать ещё одну ветвь для кода, отправленного во второй восходящий поток, например развёртывания в AWS CodeCommit.

Вы можете создать ветку с помощью checkout -b:

git checkout -b deployment

Затем добавьте развёртывание remote:

git remote add deployment <URL>

и загрузите основную ветку:

git fetch deployment master

Затем вы можете настроить восходящий поток для текущей ветки, запустив:

git branch --set-upstream-to=deployment/master

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

Было бы идеально, если бы вторая ветвь была только односторонней, то есть вы только push (отправлять) код, а не pull (скачивать) новый код, иначе вы можете столкнуться с неожиданными конфликтами. Помимо этого, git отлично работает с несколькими remote.

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *