Добавить в корзинуПозвонить
Найти в Дзене
КББ

Синхронизация кода в два репозитория одновременно

В условиях турбулентной работы облачных сервисов (снова так скажем) вопрос избыточности хранения кода становится актуальным. Держать проект только на GitHub — это риск. Решением может стать зеркалирование кода в другой сервис, например, на GitVerse. Обычно мы привыкли, что один `remote` (например, `origin`) привязан к одному URL. Но Git позволяет добавить несколько URL для push-операций в один remote. Если у вас уже есть основной репозиторий на GitHub, достаточно добавить второй URL для отправки данных: git remote set-url --add --push origin git@gitverse.ru:tatarinovms/ShadowRocketSimpleConfig.git Теперь при выполнении команды `git push origin` ваши изменения полетят сразу в оба репозитория. Главная проблема возникает, когда в одном из зеркал есть изменения, которых нет в другом (например, вы отредактировали README прямо в веб-интерфейсе GitVerse). В этом случае обычный push будет отклонен. Решить это можно через создание временного remote для «проблемного» зеркала и слияние веток: gi
Оглавление

В условиях турбулентной работы облачных сервисов (снова так скажем) вопрос избыточности хранения кода становится актуальным. Держать проект только на GitHub — это риск. Решением может стать зеркалирование кода в другой сервис, например, на GitVerse.

Обычно мы привыкли, что один `remote` (например, `origin`) привязан к одному URL. Но Git позволяет добавить несколько URL для push-операций в один remote.

Как это настроить

Если у вас уже есть основной репозиторий на GitHub, достаточно добавить второй URL для отправки данных:

git remote set-url --add --push origin git@gitverse.ru:tatarinovms/ShadowRocketSimpleConfig.git

Теперь при выполнении команды `git push origin` ваши изменения полетят сразу в оба репозитория.

Нюансы с конфликтами

Главная проблема возникает, когда в одном из зеркал есть изменения, которых нет в другом (например, вы отредактировали README прямо в веб-интерфейсе GitVerse). В этом случае обычный push будет отклонен.

Решить это можно через создание временного remote для «проблемного» зеркала и слияние веток:

  • Добавляем зеркало как отдельный remote:

git remote add gitverse git@gitverse.ru:tatarinovms/ShadowRocketSimpleConfig.git

Подтягиваем изменения, разрешая несвязанные истории:

git pull gitverse main --no-rebase --allow-unrelated-histories

  • После разрешения конфликтов снова пушим всё в origin

Теперь код синхронизирован, а вы спите спокойно, зная, что копия вашего проекта лежит на разных площадках.