У нас есть две разные команды, каждая в своем местоположении, работающая с Mercurial, у каждого местоположения есть эталонный репозиторий. Каждое местоположение имеет доступ к корпоративной сети, но две сети не могут быть напрямую связаны (поверьте, мы спросили): мы можем только обмениваться файлами. Мы хотели бы иметь возможность регулярно синхронизировать эти два местоположения, чтобы можно было делиться работой через соответствующие справочные репозитории.
Требования:
- Обмен должен быть разрешен в любом направлении.
- Нам необходимо иметь возможность работать над некоторыми ветвями одновременно с обеих сторон или, по крайней мере, восстанавливаться в случаях, когда это произошло, даже если мы ожидаем, что большую часть времени будем работать над отдельными ветвями. Это подразумевает, что для обработки расходящихся работ может потребоваться шаг интеграции.
- Большая часть отслеживания должна выполняться автоматически, так что ручное вмешательство и риск манипулирования ошибками из-за этого сводятся к минимуму (не то, что они будут фатальными, но лучше всего избегать указания пальцем: доверие ограничено). У нас есть много ветвей, обработка которых одна за другой - не стартер.
- Эталонными репозиториями можно манипулировать только с помощью удаленного push / pull и, при необходимости, легких административных операций, поскольку они находятся под контролем IT и потому, что мы хотим, чтобы они всегда были согласованными, то есть сначала выполнялась интеграция, а только потом изменения с другой стороны, опубликованные вместе с интеграцией в локальном репозитории.
- Мы не можем отправлять весь репозиторий (даже tar-gzipped) каждый раз: он не только немного велик сам по себе, но и все последовательно отправленные пакеты хранятся в записях, поскольку это является частью договорных обязательств и имеет N копий хранилище там быстро станет неустойчивым.
- Вся необходимая информация должна храниться в локальном центральном месте (те же ограничения, что и у репозиториев ссылок), чтобы любой разработчик мог выполнять этапы синхронизации, не завися от информации, хранящейся в локальном репозитории (ях) конкретного разработчика. .
Non-требования:
- Обработка более двух отключенных сайтов. Два уже будут достаточно сложными.
- Ночная обработка. Обмены будут запускаться и обрабатываться вручную.
- Ограниченное количество или сложность команд. Если необходимо много сложных команд, пусть так и будет, мы всегда можем скрыть эту сложность в скрипте.
- Пересечение автономных синхронизаций. Это всегда означает проблемы, как с потоками. Таким образом, мы можем предположить, что операции автономной синхронизации полностью упорядочены, независимо от их направления, и при необходимости по очереди.
- Детали управления филиалами и т. Д. Это наш внутренний бизнес.
- Поддержка Mercurial закладок. Мы ненадолго поэкспериментировали с ними, прежде чем оставить их.