¿Impacto de una gran cantidad de sucursales en un git repo?

¿Alguien sabe cuál es el impacto de un git repo que tiene muchas sucursales (2000+)? ¿Git pull o git fetch ralentizan debido a tener tantas twigs? Proporcione puntos de reference si hay una diferencia.

Como otros han señalado, las sucursales y otros refs son solo files en el sistema de files (excepto que no es del todo cierto debido a los refs empaquetados ) y son bastante baratos, pero eso no significa que su número no pueda afectar el performance. Véase, por ejemplo, el performance de inserción deficiente con una gran cantidad de subprocesss de refs en la list de distribución de Git para un ejemplo reciente (diciembre de 2014) del performance de Git que se ve afectado por tener 20k refs en un repository.

Si mal no recuerdo, parte del procesamiento de ref era O (n²) hace unos años, pero eso bien puede haberse arreglado desde entonces. Hay un hilo de discusión de repository de marzo de 2012 que contiene algunos detalles potencialmente útiles, si es que están datedos y son específicos de JGit.

El también algo anticuado artículo de Scaling Gerrit habla (entre otras cosas) de posibles problemas con recuentos altos de ref, pero también señala que varios sitios tienen gits con más de 100k refs. Tenemos un git con ~ 150k refs y no creo que estemos viendo problemas de performance con él.

Un aspecto de tener muchas references es el tamaño de la publicidad de la reference al comienzo de algunas transactions de Git. El tamaño de la publicidad de los 150k ref git antes mencionados es de aproximadamente 10 MB, es decir, cada operación de captura de git va a download esa cantidad de datos.

Así que sí, no ignore el problema por completo, pero no debe perder el sueño con solo 2000 refs.

Para responder a su pregunta, debe saber cómo maneja las twigs Git. ¿Qué son twigs?

Una twig es solo una reference a un compromiso con el repository local, la creación de sucursales es muy barata. .git directory .git contiene directorys que contienen los metadatos que usa git, cuando se crea una twig, lo que sucede es que se crea una reference a la twig local y se crea un logging de historial. En otras palabras, crear sucursales crea files y references, el sistema puede manejar fácilmente 2000 files.

Te aconsejo que revises 3.1 Git Branching – Branches in a Nutshell , contiene información que podría ayudarte a entender mejor cómo se manejan las twigs.

No tengo puntos de reference, pero una forma de garantizar que una git fetch sigue siendo razonable, incluso si el repository de subida tiene un gran set de twigs, sería un refspec específico less general que el pnetworkingeterminado.

 fetch = +refs/heads/*:refs/remotes/origin/* 

Puede agregar tantas references de búsqueda a un control remoto como desee, reemplazando de manera efectiva el refspec catch-all anterior con especificaciones más específicas para include solo las twigs que realmente necesita (aunque el repository remoto tenga miles de ellas)

 fetch = +refs/heads/master:refs/remotes/origin/master fetch = +refs/heads/br*:refs/remotes/origin/br* fetch = +refs/heads/mybranch:refs/remotes/origin/mybranch .... 

Sí, lo hace. Localmente, no es un gran problema, aunque sí afecta varios commands locales. En particular, cuando intenta describir una confirmación basada en los refs disponibles.

En la networking, Git hace un anuncio de reference inicial cuando te conectas para recibir actualizaciones. Puede aprender sobre esto en el documento del protocolo del package . El problema aquí es que su connection de networking puede ser escamosa o latente, y esa publicidad inicial puede demorar un time como resultado. Se ha debatido eliminar este requisito, pero, como siempre, los problemas de compatibilidad lo complican. La discusión más reciente al respecto está aquí .

Probablemente también desee ver una discusión reciente sobre la escala de Git . Hay muchas maneras en que puede desear que Git escale, y hasta ahora se ha discutido la mayoría de ellas. Creo que te da una buena idea de en qué es bueno Git, y dónde podría usar algo de trabajo. Lo resumiría para ti, pero no creo que pueda hacerle justicia. Hay mucha información útil allí.