Usar Git para distribuir comstackciones nocturnas a un estudio

Version corta

Necesito distribuir builds nocturnas a más de 70 personas cada mañana, me gustaría usar git para equilibrar la carga de la transferencia, y me gustaría saber si hay consejos, trampas o fallas con la idea antes de comenzar a diseñar el sistema.

Versión larga

Cada mañana tenemos que distribuir nuestra construcción nocturna en el estudio de más de 70 personas (artistas, evaluadores, progtwigdores, producción, etc.). Hasta ahora, hemos copydo la compilation en un server y hemos escrito un progtwig de synchronization que lo recupera (usando Robocopy debajo); incluso con la configuration de espejos, la velocidad de transferencia es inaceptablemente lenta, demorando hasta una hora o más para sincronizarse en las horas pico (las horas pico son aproximadamente 15 minutos) lo que indica que se trata de un cuello de botella de E / S de hardware.

Una idea shiny (aunque definitivamente no original) que tuve fue distribuir la carga por todo el estudio. Después de investigar escribiendo a un cliente usando el infame protocolo bit-torrent, se me ocurrió pensar que podía usar git, ya que por layout nos daría la distribución de la compilation y la administración de revisiones con la ventaja adicional de ser less serveres.

Preguntas

  1. ¿Cómo empiezas a usar git? Tengo experiencia con sistemas de control de fuente centralmente ubicados como Perforce y SVN . Al leer la documentation, parece que todo lo que necesita hacer es ejecutar git init path\\to\folder y luego en otra máquina ejecutar git clone url ?

  2. ¿Dónde obtengo la url del command git clone anterior? ¿Puedo definir? Encuentro extraño el concepto de tener una URL porque el git no tiene un server central, ¿o no? por ejemplo, similar a un rastreador de bit-torrent?

  3. ¿Cuál sería la mejor opción para identificar construcciones, usar numbers o tags de lists de cambios?

  4. ¿Es posible limitar el número de revisiones almacenadas? Esto sería útil ya que además de las comstackciones nocturnas, también tenemos varias comstackciones de CI a lo largo del día que deseamos distribuir, sin embargo, no tiene sentido tener infinitas revisiones de numbers. En Perforce puede limitar las revisiones estableciendo una propiedad.

No creo que el git sea realmente útil en tu situación. Sí, se distribuye, pero no en el caso de "distribuir algo a más gente como sea posible". No le ayuda a networkingucir la carga de ancho de banda, también habrá una carga adicional si va a usar git sobre ssh. Puede ser que deberías dar un paso atrás y dar otra oportunidad al protocolo bittorrent.

  1. puede usar el protocolo de file (" protocolo local ") si todos sus clientes tienen acceso compartido a su server.
  2. si puedes hacer un dir o ls de tu cliente … obtienes la url que necesitas.
  3. Etiquetas: una vez que clona un repository, puede verificarlo con una label determinada.
  4. en realidad, no searchá todas las mañanas los nuevos commits para get un historial completo.

Nota: poner binarys en un repository distribuido no es una solución que escalará bien en el time , y el repository se volverá cada vez más grande. (tienes configuraciones git alternativas aquí ).
La ventaja es calcular el delta por el repo de Git central (que será más rápido que un robocopy) y enviar dicho delta como una respuesta a una git fetch realizada por un repository en sentido descendente.

  1. Sí, esa es la esencia de eso. Crea un repository en alguna parte y luego puedes clonarlo desde otro lugar.

  2. El repository que inicie en 1) debe ser accesible desde la máquina a la que está clonando. Git no tiene serveres, pero todos los repositorys tienen que get sus cosas de algún lado. Entonces, todas sus más de 70 máquinas tendrán que saber dónde deben get la nueva versión. Y si desea distribuir la carga, tendrá que descubrir una estrategia sobre quién recibe su actualización de quién.

    La URL podría ser una ruta de file, una ruta de networking, un host SSH con ruta, etc.

  3. Las tags funcionarían bien

  4. Tal vez puedas volver a establecer la base del repository git para eliminar las revisiones anteriores. Ver Eliminar completamente las confirmaciones de Git (antiguas) de la historia

Sin embargo, no creo que vaya a resolver su problema original, distribuyendo la carga. Otras avenidas deben ser investigadas. Copia de multidifusión, por ejemplo, ¿quizás MQcast y MQcatch pueden ayudarlo?