Archivos grandes en control de fuente (TFS)

Recientemente, en la oficina, hemos estado hablando de colocar files grandes en nuestro repository TFS. Los files en sí son XML, generalmente de 100 a 200 MB de tamaño, y a veces tan grandes como 1 GB. Los usamos como datos para las testings automatizadas y son en su mayoría estáticos (uno obtiene un ajuste menor cada año más o less). De todos modos, hay una noción de que poner files como este en el repository es un no-no porque son "grandes" y eso hará que las cosas sean "lentas" (fuera del check-in / out original) pero realmente no lo hacemos tener alguna evidencia para respaldar esto.

Entonces mi pregunta es, ¿cuáles son las ventajas / desventajas / implicaciones de poner grandes files estáticos en un repository de código fuente como TFS (o SVN, Git, etc. para el caso) ¿Está bien? ¿"Llena el server" o tiene alguna otra consecuencia nefasta?

tl; dr : TFS está diseñado para manejar files grandes con gracia. El obstáculo más grande que tendrá que enfrentar es el ancho de banda de la networking para cargar / download los files. El segundo problema es el espacio de almacenamiento en el server. Suponiendo que haya considerado estos dos problemas, no debería tener ningún otro problema.

Ancho de banda de la networking: hay muy poca sobrecarga al registrar o recibir files, debe ser tan rápido como una carga o descarga HTTP típica. Si sus clientes están alejados del server, en lo que respecta a la networking, pueden beneficiarse al tener un proxy de control de fuente TFS en su networking local para acelerar las descargas.

Tenga en count que, a diferencia de algunos sistemas de control de versiones, TFS no computa ni transmite deltas al cargar o download contenido nuevo. Es decir, si un cliente tenía la revisión 4 de un file de text grande y la revisión 5 había agregado algunas líneas al final, algunas herramientas de control de versión optimizan esta experiencia para enviar solo las líneas modificadas. TFS no hace esta optimization, por lo que si sus files cambian con frecuencia, los clientes necesitarán download la totalidad del file cada vez.

Almacenamiento en el server : el espacio en el disco en el server es bastante sencillo: necesitará suficiente espacio para save los files; además, hay poco más que eso. TFS no se ralentizará solo porque su repository contiene files de gran tamaño.

Si estos files se modifican con frecuencia, también deberá tener en count el espacio en disco utilizado por las revisiones. TFS almacena "deltas" entre revisiones de files, es decir, una diferencia binaria entre dos versiones. Entonces, si el contenido del file cambia mínimamente entre revisiones como en el caso típico de uso con files de text, el costo de almacenamiento debería ser bajo. Sin embargo, si la totalidad del contenido cambia como sería típico con files binarys como imágenes o DLL, entonces necesitará suficiente espacio en disco para almacenar cada revisión. (Por supuesto, puede destroy las revisiones anteriores para recuperar ese espacio).

Una nota sobre los deltas en TFS: para networkingucir la sobrecarga en el momento del check-in, los deltas entre revisiones no se computan inmediatamente, hay un trabajo de "deltafication" de background que se ejecuta cada noche para calcular los deltas para recortar el espacio. Hasta ese momento, cada revisión se almacena en su totalidad en la database. Por lo tanto, si tiene un file de text muy grande con muchas revisiones diarias, los requisitos de espacio en disco deberán tener esto en count.

Almacenamiento del cliente: los clientes necesitarán tener suficiente espacio en disco para contener estos files también (aunque solo en la revisión que hayan descargado). Esto se puede mitigar en las asignaciones del espacio de trabajo de manera que los files grandes estén ocultos (o no incluidos en su espacio de trabajo) si no son necesarios.

Advertencia: obtención de versiones históricas: si se encuentra solicitando frecuentemente versiones históricas de files grandes (por ejemplo: quiero una image ISO con siete sets de cambios), entonces hará que el server aplique la cadena delta para volver a esa revisión . Si tiene varios clientes haciendo esto al mismo time, esto podría gravar su memory.

Si esos files cambian constantemente y sus deltas son grandes, eventualmente esperaría una penalización en el performance general de TFS.

Usted indica claramente que este no es el caso, por lo tanto, siempre que su server SQL tenga la capacidad de albergar el almacenamiento, creo que debería poder continuar sin ninguna implicación.

Un inconveniente menor que puede experimentar es cuando está construyendo nuevas áreas de trabajo, donde tendría que extraer esos files de su repository. Desafortunadamente, esto también ocurre durante la construcción de TFS, por lo que es posible que sus comstackciones demoren mucho más. La gravedad de este ángulo depende en gran medida de la constelación / estabilidad de su networking.

El mayor problema (inconveniencia) que tendrá es tener que download estos files masivos a todos sus espacios de trabajo o asignarlos. Considere ponerlos en un proyecto de equipo separado para hacer esto más fácil (a less que desee includelos en las sucursales, en cuyo caso yo abusaría de mantener todo en un proyecto de equipo)

Si tiene el control del formatting xml, considere también algunos ajustes para hacerlos más pequeños. Esto mejorará el performance de las operaciones de almacenamiento / obtención y también la velocidad de carga … Acorte los nombres de los elementos y los attributes, networkinguzca el número de decimales que está generando para los numbers de punto flotante, etc. Encontrará esquemas simples de amenazas como estos que golpearán muchos megabytes del tamaño de files de tamaño Gb, y es fácil recuperar una transformación o código xslt rápido para convertir los files rápidamente al nuevo formatting.