Tengo varios sitios que utilizan Drupal, tengo varios servidores, en vivo, dev1, dev2 ...espejos git sincronizados en todo momento
repo código base de Drupal es grande (112MB), así que estoy interesado para aprovechar al máximo las capacidades de enlace cruzado de git, de modo que cada vez que agregue un sitio no se duplique esto.
Así que, digamos, el servidor vivo que tiene un acuerdo de recompra maestro desnuda, y todos mis sitios son clones de este, cada uno usando una rama diferente. Esto es genial en un servidor, se usan enlaces duros, es rápido y eficiente.
Pero en mis servidores dev, por lo general todo el clon de la cesión temporal maestro al descubierto, lo que significa dos sitios en la misma máquina no pueden utilizar los enlaces duros para ahorrar espacio.
Lo que me gustaría hacer es configurar un espejo de la cesión temporal al descubierto en cada uno de mis servidores dev, y después clon de eso.
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
Todo bien hasta ahora. Pero quiero que los espejos estén sincronizados todo el tiempo. Entonces usé post-receive hook en el espejo de dev1 para hacer git push --mirror origin
. Ahora si site1 en dev1 empuja commits, son empujados mágicamente al master-bare-repo.
Pero lo que si hago un cambio en el servidor vivo, y empuje que? No puedo preparar un gancho post-receive
para empujar al otro (s) porque eso sería presumiblemente desencadenar sus post-receive
ganchos que terminarían en la recursividad?
¿Hay alguna forma inteligente de evitar esto?
¿Sería un proceso de fondo que intenta periódicamente para tirar y empujar a partir de la obra servidor en vivo (en lugar de después de la recepción)? Además, pruébelo, pero no creo que se quede atascado en su método, porque la segunda vez que intenta presionar al otro servidor no recibe nada, ya que no hay nada que empujar. – Shahbaz