¿Cómo debería usar git en más de 300 sitios web?

Actualmente tengo la responsabilidad de mejorar algunas prácticas de desarrollo deficientes. Henetworkingé un server de producción con más de 300 sitios web funcionando con bases de código semi-similares. Ninguno de los cuales es perfectamente idéntico. No ha habido una administración de código fuente para todos los sitios. El equipo de desarrollo ha estado trabajando con prácticas antiguas de copyr un directory y save una copy de security en lugar de trabajar y poder deshacer los cambios. Esto también hace que sea difícil rastrear quién ha hecho qué en la base de código de sitios, especialmente para "soluciones rápidas". La conclusión lógica para mí es que necesitamos emplear SCM. Git es mi elección para esto, ya que es fácil de usar y poner en marcha. También tiene una gran cantidad de documentation sobre cómo usarlo y resolver los problemas que puedan popup. El único problema es que la documentation gira en torno al uso de un solo sitio, y no en entornos de producción de alta capacidad.

Tengo problemas para encontrar documentation sobre cómo utilizar git en un entorno de producción con muchos sitios. Mi experiencia previa con git ha sido en entornos con less de 10 proyectos en git y cada uno era su propio repository, con estos 10 proyectos algunos tenían miles de sitios derivados todos de una base de código único. Lo primero que pensé fue en hacer que cada sitio sea un repository propio para que pueda ser ramificado y desarrollado individualmente sin afectar a ningún otro sitio. He hablado con algunas personas sobre el tema y me han dicho que convierta los 300 sitios en un único repository masivo, y luego empuje y extraiga todo el repository arriba y abajo, esto significaría que se moverán casi 300GB de datos. Me doy count de que Git hace un empuje y arrastre incremental para que no se empujen y tomen datos de 300GB cada vez; sin embargo, esto podría ser miles de files que necesitarían ser buscados para get un solo estado de git. Esto parece un poco exagerado y tiene el potencial de que muchas cosas salgan mal, especialmente con 5-10 de nosotros trabajando en varios sitios en el mismo repository masivo.

¿Cuál sería la mejor ruta en este caso, 1 solo depósito masivo o cientos de pequeños repositorys? ¿O hay otra opción que me falta?

Le recomendaría encarecidamente que utilice un solo repository, uno para cada sitio / aplicación web. O al less divida los más de 300 en un grupo más pequeño de sitios estrechamente relacionados en un solo repository de aproximadamente 10 sitios. O tal vez dividir por equipos de desarrolladores … ¡pero no tienen un repository masivo!

Aunque es perfectamente posible que uno pueda tener un gran repository, es una mala práctica y, dependiendo de lo grande que sea su repository, probablemente sea una mala idea. Mientras más grande sea el repository, más confusos se vuelven los cambios estructurales / de files, y cosas como simples renombrados y fusiones se convierten en un desastre. Además, ir "atrás en el time" en su historial de fonts se vuelve virtualmente imposible si Git necesita actualizar miles de files para hacerlo.

Además, para fines de copy de security e implementación, desea tener repositorys más pequeños. Tuvimos un enorme repository de soluciones .NET que tenía más de 30 proyectos diferentes y tardó media hora en clonarlo. Estuvo mal. Lo recortamos y eliminamos todo lo que contenía el "código no fuente" (pdfs, imágenes, binarys) y eliminamos proyectos que deberían haber estado por su count. Es mucho mejor, más rápido y navegar a través de la historia es una brisa clara. También puede hacer uso del almacenamiento en la nube como Amazon S3 para tratar con files de código estáticos que no son de origen.

Estamos haciendo uso de Nuget para dependencies y bibliotecas externas. No estoy seguro de qué framework / lenguaje está usando, pero hay muchas herramientas que no son de .NET para ayudarlo a administrar cosas como esta. Espero que esto ayude.

PD: Aunque con Github es más barato usar less repositorys … quizás sea mejor search otros hosts de git que solo cobren por número de desarrolladores … Me viene a la mente Bitbucket …

Creo que poner todos los sitios en un repository no es la mejor opción por varias razones:

  1. Uno enorme no es la mejor idea, como sugieren todas las otras respuestas.
  2. Probablemente no desarrolle todos los sitios en el mismo ciclo de publicación, pero con un repository es más difícil revisar los diferentes lanzamientos o deshacer un solo sitio.
  3. Aunque sugiera que todos estos sitios pueden tener una base de código común, es poco probable que lo ayude mucho en la situación actual, por lo que insert todos los sitios en un solo repository no tiene ningún beneficio cuando se trata de identificar, aislar y unificar código que puede ser compartido.

De hecho, probablemente se está acercando a una gran tarea de refactorización para todos los sitios porque parecen usar casi el mismo código, pero me pregunto si este es realmente el caso, y si le ayudará de todos modos.

De hecho, probablemente detectará que, por ejemplo, está utilizando diez o veinte versiones ligeramente diferentes de una capa de database o un registrador. Cualquier diferencia no se puede eliminar porque es esencial para el sitio que la utiliza y es incompatible con cualquier otro sitio porque el método utilizado utiliza una firma ligeramente diferente a cualquier otra. No le ayudará a poder crear la única versión verdadera del código fuente que todos los sitios puedan compartir, porque sería una gran cantidad de trabajo hacer que ese código se pueda utilizar en cualquier lugar.

Haz un paso después del otro. Primero establezca control de versiones. Un informe por sitio le permite crear gradualmente todos los repositorys que se necesitan.

Después de eso, puede crear aún más repositorys para crear un set de bibliotecas que contengan el código que realmente se puede compartir, o puede replace las partes que se desviaron demasiado con algo completamente diferente de las fonts externas. Lo que sea que le permita continuar manteniendo estos sitios.

Usted dice que sus "sitios" son muy similares, y probablemente se derivaron de la misma base de código, entonces con alta probabilidad tendrán muchos files idénticos (o files con contenido que difiere muy poco).

Recuerde que git es extremadamente eficiente con la forma en que almacena sus datos, y tiene un algorithm de compression delta que está optimizado para almacenar fragments similares en el repository solo una vez. Con eso en mente, realmente deberías tratar de poner todos estos sitios en el repository single git y optimizarlos con git gc : te sorprenderá ver que el tamaño real de la tienda de objects git podría ser fácilmente 10 veces menor de lo que esperabas.