Мы находимся в ситуации с распределенной командой, где члены команды принадлежат к разным компаниям и не имеют доступа к серверам друг друга. Мы работаем над одним проектом и у нас есть один git-репозиторий, который необходимо синхронизировать. Обе части команды (для простоты назовем их командой A или командой B) вносят изменения.
У нас нет системы, которая имела бы доступ к обоим серверам, и вряд ли она появится где-нибудь в ближайшее время.
Как обеспечить синхронизацию репозитория между разными местоположениями?
До сих пор мы пробовали следующие подходы с небольшим успехом.
Команда А:
git clone --mirror https://server_a.com/repository_origin.git получить полную копию со всеми ветками и тегами из исходного репозитория
Заверните сгенерированную папку в zip-файл и передайте команде Б
Команда Б:
Извлечь почтовый индекс
cd repository_origin.git
git remote set-url --push origin https://server_b.com/repository_mirror.git
подходы
git push --mirror приводит к тому, что изменения команды Б полностью отбрасываются, но все изменения команды А были объединены в зеркальный репозиторий, т.е. изменения команды Б не находятся в зеркальном репозитории.git fetch --all правильно получает все локальные изменения команды Bgit push --mirror приводит к выводу, что изменений нет, то есть изменений команды А нет в зеркальном репозитории.Очевидно, нам также нужно получить изменения от команды B в исходном репозитории, но без того, чтобы путь от A к B работал так, как хотелось бы, не кажется очень полезным пытаться заставить B к A работать так, как хотелось бы.
Итак, мы попробовали эти подходы, но ни один из них не сработал. Кто-нибудь знает, как решить эту проблему? Конечно, мы надеемся получить решение, при котором все будут работать над одним и тем же исходным репозиторием, но из-за правил это невозможно на данный момент и в обозримом будущем.





Git был разработан для поддержки полнофункциональной совместной работы по электронной почте. В книге Pro Git есть глава, посвященная этому, но в основном вы можете генерировать изменения, используя git format-patch, отправлять их с помощью git imap-send и применять их на другой стороне с помощью git am. Другая глава той же книги включает короткий пример.
Это может показаться низкотехнологичным, но это зрелый рабочий процесс, который хорошо работает для разработка самого Git.
Если у ваших команд нет возможности напрямую клонировать исходную копию репозитория, вы можете использовать создайте пакет с git bundle, а затем клонируйте его.
Если вам не нравится поток электронной почты, вы также можете используйте git bundle для обновления изолированных систем. Вообще говоря, git bundle, вероятно, лучше, чем заархивировать клоны вручную.