¿Versión de files "derivados"?

El uso de interfaces en línea para un sistema de control de versiones es una buena manera de tener una location publicada para las versiones más recientes de código. Por ejemplo, tengo aquí un package LaTeX (que se lanza a CTAN cada vez que se verifican cambios para que realmente funcione):

http://github.com/wspr/pstool/tree/master

El package en sí se deriva de un único file (en este caso, pstool.tex) que, cuando se procesa, produce la documentation, el file léame, el file instalador y los files reales que componen el package tal como lo utiliza LaTeX.

Para facilitar la tarea de los usuarios que desean download este material, incluyo todos los files derivados mencionados anteriormente en el propio repository, así como el file maestro pstool.tex. Esto significa que tendré el doble de cambios cada vez que me comprometo porque el file del package pstool.sty es un subset generado del file maestro.

¿Es esto una perversión del control de versión?


@ Jon Limjap planteó un buen punto:

¿Hay alguna otra manera para que publique sus files generados en otro lugar para su descarga, en lugar de confiar en que su control de versiones sea su server de descargas?

Ese es realmente el quid de la cuestión en este caso. Sí, las versiones publicadas del package se pueden get de otro lado. Entonces realmente tiene más sentido solo la versión de los files no generados.

Por otro lado, el comentario de @ Madir de que:

la conveniencia, que es real y repetida, supera el costo, que se soporta detrás de la escena

también es pertinente porque si un usuario encuentra un error y lo soluciono de inmediato, pueden dirigirse al repository y tomar el file que es necesario para que sigan trabajando sin tener que ejecutar ningún paso de "installation".

Y este, creo, es el caso de uso más importante para mi set particular de proyectos .

Estoy usando Tortoise SVN para el desarrollo de pequeños sistemas ASP.NET. La mayoría de los códigos se interpretan como ASPX, pero hay alnetworkingedor de una docena de DLL binarys generados por un paso de compilation manual. Si bien no tiene mucho sentido tener estas versiones del código fuente en teoría, ciertamente hace que sea conveniente asegurarse de que se reflejen correctamente desde el entorno de desarrollo en el sistema de producción (un clic). Además, en caso de desastre, la reversión al paso anterior es nuevamente un clic en SVN.

Así que mordí la bala y los incluí en el file SVN; la conveniencia, que es real y repetida, supera el costo, que se soporta entre bastidores.

No versionamos files que se pueden generar automáticamente utilizando scripts incluidos en el repository. La razón de esto es que después de un pago, estos files se pueden rebuild con un solo clic o command. En nuestros proyectos siempre tratamos de hacer esto lo más fácil posible, y así evitar la necesidad de versionar estos files.

Un escenario que puedo imaginar es donde esto podría ser útil si se "labeln" lanzamientos específicos de un producto, para su uso en un entorno de producción (o cualquier entorno sin desarrollo) donde las herramientas necesarias para generar el resultado podrían no estar disponibles.

También utilizamos objectives en nuestros scripts de compilation que pueden crear y cargar files con una versión de lanzamiento de nuestros productos. Esto puede cargarse en un server de producción o en un server HTTP para que los usuarios lo descarguen.

No necesariamente, aunque las mejores prácticas para el control de la fuente aconsejan que no incluya files generados, por razones obvias.

¿Hay alguna otra manera para que publique sus files generados en otro lugar para su descarga, en lugar de confiar en que su control de versiones sea su server de descargas?

Normalmente, los files derivados no deben almacenarse en el control de versiones. En su caso, podría crear un procedimiento de liberación que creara un tarball que incluyera los files derivados.

Como dices, mantener los files derivados en control de versiones solo aumenta la cantidad de ruido con el que tienes que lidiar.

En algunos casos lo hacemos, pero es más un tipo de sysadmin tipo de caso de uso, donde los files generados (por ejemplo, files de zona DNS creados a partir de un script) tienen un interés intrínseco por derecho propio, y el control de revisión es un seguimiento de auditoría más lineal que control fuente de ramificación y labeldo.