Постоянно синхронизировать git зеркала

У меня есть несколько сайтов, которые используют Drupal, у меня есть несколько серверов, live, dev1, dev2 ...

Репо кодовой базы Drupal имеет большой размер (112 Мб), поэтому я стремлюсь максимально использовать возможности жестких ссылок git, чтобы каждый раз, когда я добавлял сайт, он не дублировал это.

Так, скажем, на живом сервере у меня есть голое главное репо, и все мои сайты являются его клонами, каждый из которых использует свою ветвь. Это здорово на одном сервере, используются жесткие ссылки, это быстро и эффективно.

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

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

dev1$ git clone --mirror live:master-bare-repo  dev1-mirror-repo
dev1$ git clone -b site1 dev1-mirror-repo site1
dev1$ git clone -b site2 dev1-mirror-repo site2

Пока все хорошо. Но я хочу, чтобы зеркала всегда были синхронизированы. Так что я использовалкрюк после получения на зеркало dev1 ', чтобы сделатьgit push --mirror origin, Теперь, если site1 на dev1 pusches фиксирует, они волшебным образом передаются в master-bare-repo.

But что если я внесу изменения вlive сервер, а что толкать? Я не могу настроитьpost-receive крюк, чтобы подтолкнуть к другим (и), потому что это предположительно сработаетtheir post-receive крючки, которые в конечном итоге в рекурсии?

Есть ли какой-нибудь умный способ обойти это?

 Shahbaz01 июн. 2012 г., 16:11
Будет ли фоновый процесс периодически пытаться вытащить и запустить работающий сервер (вместо пост-получения)? Кроме того, попробуйте, но я не думаю, что вы застряли бы в цикле с вашим методом, потому что во второй раз, когда вы пытаетесь отправить на другой сервер, ничего не получает, так как нечего нажимать.

Ответы на вопрос(1)

Решение Вопроса

Прежде всего,you won't end up in a recursionпоскольку перехват сообщений после получения не выполняется, когда «все обновлено» (как отмечено вэтот другой вопрос), который будет результатомpushes с зеркал на живой сервер.

С другой стороны, это не все масштабируемый дизайн (каждый раз, когда вы добавляете новое зеркало, вам нужно будет изменить ловушку вашего живого сервера, чтобы добавить сайт для отправки). Вы, вероятно, найдете более изящным использование «ленивого» Стратегия синхронизации в ваших зеркалах: когда они получают толчок, они не просто толкают к мастеру, но перед этим они получают / извлекают из мастера. Таким образом, вам не нужно устанавливать ловушку в мастере, и стратегия синхронизации будет полностью управляться зеркалами. Недостатком этой стратегии является то, что вы, возможно, в конечном итоге захотите внести изменения в работающий сервер, который вы хотите распространить на зеркала, прежде чем им понадобятся какие-либо изменения. Поэтому вы должны подумать о том, будут ли изменения ваших мастеров настолько важными, чтобы компенсировать компромисс в масштабируемости. Конечно, патч, чтобы сделать это "масштабируемым" дизайн также "синхронизируемый" это использование внешнего задания cron для периодической проверки изменений в master, как это предлагается в комментариях.

 artfulrobot24 июл. 2012 г., 15:37
Похоже, это сработает! Благодарю. Я попробую и поставлю галочку на ответ после проверки.

Ваш ответ на вопрос