2010-11-26 24 views
9

Estoy buscando una forma de sincronizar automáticamente repositorios Git en (2) servidores para que sean intercambiables desde un tercer punto.Cómo sincronizar repositorios Git en 2 servidores

La situación es la siguiente: Utilizamos en gran medida git para todos nuestros proyectos, y algunos de los repositorios crecen bastante rápido. Actualmente tenemos un servidor central y todos están empujando/tirando hacia/desde este. Sin embargo, todo esto pasa por la conexión a Internet y, por lo tanto, no es la forma más rápida.

La idea: Coloque otro servidor en la oficina y tenga todos los repositorios git allí para uso en la oficina. Este servidor debería estar sincronizado con el que está en línea. En el mejor de los casos, los usuarios ni siquiera sabrían cuál usar a través de algunos ajustes de dns, por lo que la dirección de los repositorios de servidor en línea se resuelve en la oficina en uno cuando se conecta a la red allí.

¿Alguien está haciendo algo similar por ahí? ¿O hay una manera más fácil de lograr el objetivo?

+0

¿Las personas fuera de la oficina necesitan poder empujar? – robert

+0

sí, si es posible dentro de un esfuerzo razonable – maxigs

Respuesta

4

me gustaría ver un MECHNISM tales fácilmente hecho con el SSH protocol (lo que significa un marco como gitolite está en su lugar tanto en el repositorio LAN y el repositorio http WAN), porque entonces se puede extender fácilmente el ssh forced command mecanismo para:

  • primer cheque si los dos están de recompra sYNCHRONE
  • rechazan el comando si el repositorio local es menos hasta a la fecha de que el mando a distancia uno
  • sincronizar el repositorio local con el mando a distancia una de necesaria

hacerlo con hooks es más complicado y tendría que ser cuidadosamente configuración para cada tipo de ganchos del lado del servidor con el fin de mantener ese mecanismo de sincronización para arriba en todos los tiempos.

+0

eché un vistazo rápido a la descripción del comando forzado, pero no estoy muy seguro de haber entendido cómo funcionaría. cuando hago una conexión con el lan-repo, el comando forzado verifica y ve si tiene que sincronizarse con el repositorio Wan (y lo hace si es necesario) y solo permite que el impulso pase al repositorio. ¿Cómo se vería eso desde la perspectiva de los usuarios, ya que espero al menos un pequeño retraso en el empuje de esa manera? – maxigs

+0

@maxigs: la idea (y gitolite lo ilustra) para encapsular cualquier comando que envíe (a través de ssh) con un script que a/valida tu comando b/ejecuta si es necesario algo antes de ese comando c/ejecuta el comando original d/ejecuta si es necesario algo después de ese comando. Entonces, en su caso, el a/(paso de validación) puede verificar si el repositorio en el lado del servidor (donde vive el comando forzado de ssh) no está más actualizado que el repositorio local desde el que se inició el envío. – VonC

0

Gitolite tiene una característica que reflejará los repositorios. Puede configurar el de la oficina como el maestro y el en línea como el esclavo, y permitir empujar a cualquiera de los dos.

Cuestiones relacionadas