Ho diversi siti che utilizzano Drupal, ho diversi server, dal vivo, dev1, DEV2 ...Mantenere specchi Git in sincronia in ogni momento
di Drupal base di codice pronti contro termine è grande (112MB), quindi sono entusiasta per sfruttare al meglio le capacità di hard-linking di git in modo che ogni volta che aggiungo un sito non si stia duplicando.
Così su, ad esempio, sul server live ho un repository master completo, e tutti i miei siti sono cloni di questo, ognuno con un ramo diverso. Questo è ottimo su un server, i collegamenti rigidi sono usati, è veloce ed efficiente.
Ma sui miei server di sviluppo, tipicamente clonano tutti dal repository principale nudo, il che significa che due siti sulla stessa macchina non possono utilizzare collegamenti fisici per risparmiare spazio.
Quello che mi piacerebbe fare è impostare uno specchio del repository nudo su ciascuno dei miei server di sviluppo e quindi clonarlo.
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
Tutto bene finora. Ma voglio che gli specchi rimangano sincronizzati in ogni momento. Quindi ho usato post-receive hook sul mirror di dev1 per fare git push --mirror origin
. Ora se site1 su dev1 invia commit, vengono premuti magicamente sul master-bare-repo.
Ma cosa succede se faccio un cambiamento sul server vivo, e spinta che? Non riesco a impostare un hook post-receive
per spingere all'altro perché questo presumibilmente attiverebbe gli loro amipost-receive
che finirebbero in ricorsione?
C'è qualche modo intelligente intorno a questo?
Un processo in background che tenta periodicamente di eseguire il push e passare al server live (anziché post-ricezione)? Inoltre, provalo, ma non credo ti resteresti bloccato in un loop con il tuo metodo, perché la seconda volta che provi a spingere l'altro server non ricevi nulla poiché non c'è nulla da spingere. – Shahbaz