Я хочу автоматически нажимать коммиты в методе post-receive из центрального репо в нашей локальной сети на другое центральное репо в облаке. Локальная репо создается с помощью git clone --mirror [email protected]:/path/to/repo
или эквивалентных команд.
Поскольку файлы, которые будут совершены, будут большими относительно нашей полосы пропускания вверх, вполне возможно, что это может произойти:
- Алиса инициирует нажатие на репозиторий LAN.
- Билл вытаскивает из репозитория LAN во время запуска крюка после приема.
- Локальная репо находится в середине перехода к облачному репо.
- Это также означает, что местное репо Билла содержит коммиты, которые Алиса нажала. Подтверждено путем тестирования.
- Билл инициирует нажатие на ретрансляцию локальной сети.
- Билл-нажим - это быстрый переход от Alice push, поэтому ретрансляция LAN примет его.
Когда выполняется перехват post-receive для репо-сервера LAN, начнется второе нажатие от ретрансляции локальной сети до облачного репо, и оба будут выполняться одновременно.
Я не беспокоюсь о git объектах. Наихудший сценарий заключается в том, что обе кнопки загружают все объекты с помощью нажатия Alice, но это не имеет значения, насколько я понимаю внутренние элементы git.
Меня беспокоят ссылки. Предположим, что Алиса нажала, используя гораздо более медленное соединение, так что сначала нажимать Билл заканчивается. Предположим, что потеря пакетов или что-то еще вызывает нажатие на крючок из репозитория LAN в облако Билла, чтобы завершить до того, LAN-репо на облако Алисы. Если и Алиса, и Билл нажимают главную ветку, и сначала нажимает Билл, Каким будет мастер ref на облачном репо? Я хочу, чтобы это был Bill HEAD, так как это более поздний толчок, но я обеспокоен тем, что это будет Alice HEAD.
Дальнейшие разъяснения:
Я понимаю, что Алиса выталкивает из своей машины в локальную репо, если она не сработает, когда Билл отодвинется от своей машины до локального репо. В этом случае крюк post-receive LAN repo не будет выполняться. Кроме того, предположите, что никто не будет делать силовые нажатия, поэтому , если крюк post-receive работает в репо LAN, все изменения ref быстро переходят.