У меня есть несколько сайтов, которые используют Drupal, у меня есть несколько серверов, жить, dev1, DEV2 ...Ведение GIT зеркала в синхронизации во все времена
кодовая репо Drupal является большой (объем которой составляет 112), так что я увлечена чтобы максимально использовать возможности жесткой связи git, так что каждый раз, когда я добавляю сайт, это не дублирует это.
Так что, скажем, на реальном сервере у меня есть голый мастер-репо, и все мои сайты являются клонами этого, каждый из которых использует другую ветку. Это хорошо на одном сервере, используются жесткие ссылки, это быстро и эффективно.
Но на моих dev-серверах они обычно клонируются от основного репо-сервера, что означает, что два сайта на одном компьютере не могут использовать жесткие ссылки для экономии места.
Что бы я хотел сделать, это настроить зеркало голого репо на каждом из моих серверов-разработчиков и затем клонировать от него.
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
Все до сих пор. Но я хочу, чтобы зеркала постоянно синхронизировались. Поэтому я использовал post-receive hook на зеркале dev1, чтобы сделать git push --mirror origin
. Теперь, если site1 на dev1 нажимает на коммит, они магически подталкиваются к master-bare-repo.
Но, что если я делаю изменения на живом сервере и нажмите что? Я не могу установить крючок post-receive
, чтобы нажать на другой (-ы), потому что это предположительно вызовет ихpost-receive
крючки, которые попадут в рекурсию?
Есть ли какой-нибудь умный способ обойти это?
Может ли фоновый процесс периодически пытаться извлечь и нажать на работу в реальном времени (вместо post-receive)? Кроме того, попробуйте, но я не думаю, что вы застряли в цикле с вашим методом, потому что во второй раз, когда вы пытаетесь нажать другой сервер, ничего не получает, так как ничего не нажать. – Shahbaz