2011-03-06 11 views
5

Estamos pensando en cambiar nuestro sistema de control de versiones de origen de Subversion a Git. Estamos presionando los límites de nuestra configuración actual y creemos que será mejor que trabajemos con git.Cómo configurar "clúster git"

Siempre hemos utilizado un servidor primario en la oficina y un espejo que se ejecuta en nuestro centro de datos. El espejo está configurado para proxy confirmaciones entrantes al servidor primario. De esta manera, las dos máquinas funcionaban como si fuera un único repositorio, lo que nos permite comprometernos con la máquina de oficina cuando estamos en la oficina o en la máquina del centro de datos cuando estamos en otro lugar.

Tener dos máquinas nos está ahorrando mucho ancho de banda y aumenta la velocidad, lo cual para nosotros es importante porque también usamos subversión como nuestra herramienta de implementación principal.

Recientemente adquirimos una tienda de desarrollo en India y trabajarán en el mismo código. Debido a los límites de ancho de banda y los problemas de latencia, tener un espejo en India también sería muy conveniente.

Como estamos cambiando a Git, estamos buscando una configuración similar. ¿Cómo puedo hacer que múltiples repositorios git actúen como uno solo? Idealmente, me gustaría que los commits a un repositorio se propaguen automáticamente a los otros servidores para el mismo repositorio.

+0

Si desea utilizar gitolite, su documentación contiene algunas instrucciones sobre cómo configurar el reflejo: https://github.com/sitaramc/gitolite/blob/pu/doc/mirroring.mkd – Cascabel

+0

Lo único que Realmente no puedo hacer, como dice en ese documento, es hacer que los usuarios empujen a múltiples repositorios. Esa es una receta para los dolores de cabeza: imagine lo que sucedería si dos usuarios presionasen al mismo tiempo a diferentes repositorios. Afortunadamente, la operación más pesada es ir a buscar (especialmente la clonación), y los espejos funcionan bien para eso. – Cascabel

+0

enlace actualizado a gitolite mirroring: http://gitolite.com/gitolite/mirroring.html – Paul

Respuesta

1

La latencia no será un problema para ti en general porque te comprometerás localmente. Es posible que no necesite hacer nada en absoluto. Las empujones y los tirones pueden ser más lentos, sin embargo. Si eso te molesta, hay muchas cosas que puedes hacer.

Usamos github como nuestro árbol "autorizado", pero no empujamos allí (nuestro code review system lo hace) y nuestros constructores (y algunos desarrolladores) no extraen de allí.

Cada pulsación en github activa post-receive hook en una o más instancias de mi proyecto gitmirror que hace una búsqueda de espejo inmediata. Estos espejos generalmente se actualizan siempre dentro de un segundo de github. Si algo le sucede al repositorio central, es muy posible que otros ni siquiera lo noten.

+0

Probablemente debería tener en cuenta que escribí gitmirror inicialmente para usarlo fuera de github donde estaba usando un enganche post-commit para notificar a un servidor diferente que las cosas se actualizaron y las actualizaciones se deben replicar. github no es una parte importante aquí, aunque el enlace posterior a la recepción hace las cosas bastante fáciles. – Dustin