2009-05-17 8 views
9

Tenemos un marco de aplicación web que queremos usar con Subversion. Lo hemos intentado un par de veces antes para configurarlo, pero la parte de generación de código de nuestra aplicación está causando problemas.Subversion: se trata de la generación de código

El problema es que el código generado de un desarrollador puede estar en un archivo más nuevo que de otro desarrollador, pero el contenido del archivo más nuevo puede ser anterior, porque el código y los archivos xml son la base para la generación de código ha sido actualizado por el desarrollador nr2.

Una solución que hemos analizado es excluir los archivos generados por el código, pero a menudo obtenemos nuevos archivos que se generan y se agregan automáticamente al repositorio a menos que recordemos excluirlo, y tenemos que verificar manualmente en los últimos archivos generados ¿Y cómo sabes si tienes el último archivo generado?

¿Alguna sugerencia sobre cómo solucionar esto en Subversion?

Respuesta

24

La mejor manera de decidir si algo debe estar en Subversion es recordar que es un sistema de control de versiones . Si no necesita recordar cómo cambió con el tiempo, no es necesario que esté en svn. Use svn:ignore para excluir archivos de dicha consideración.

Ese es el caso aquí: no le importa cómo cambiaron los archivos generados con el tiempo, solo el código original utilizado para producirlos. Eso significa que deben ser excluidos de Subversion. Puede hacer esto con un enlace precomprometido, haciendo cumplir, por ejemplo, que todos los archivos generados por código no deberían comprometerse alguna vez. Tengo una frase favorita para esta táctica: "Versión de la receta, no del pastel".

¿Y cómo puede saber si tiene el último archivo generado?

Exactamente; no, porque los archivos generados dependen de la fuente utilizada para crearlos. El siguiente paso es asegurarse de que su proceso de compilación genere automáticamente estos archivos dado el código fuente inicial, pero probablemente sea una pregunta separada de StackOverflow si no sabe cómo hacerlo.

+4

+1. "Versión la receta, no el pastel" - ¡muy agradable! –

4

Debe usar svn:ignore, porque realmente no desea enviar las cosas autogeneradas a la subversión.

+1

@krosenvold: no estoy seguro Estoy de acuerdo con eso. Si desea retroceder a un punto en el tiempo, no tener los archivos generados en SCC hace las cosas muy difíciles. Siempre he puesto el código generado en SCC. –

+0

@Mitch, ¿por qué no puedes regenerar los archivos después de la reversión? –

+0

Supongo que depende de lo que los está generando ... –

2

Quizás soy simple, pero no almacenaría los archivos generados en el control de versiones. Dado que se genera, no tiene sentido mantener un historial de versiones.

Con el código y xml para hacer la generación en el control de la versión, siempre puede generar el código para cada versión.

10

Una de las soluciones que hemos visto es excluir el código genera archivos

Sí! ¡Mil veces sí! Nunca haga control de versiones de archivos que puede generar a partir de otros archivos. En su lugar, agregue las reglas de generación a su archivo MAKE (u otro script de compilación).

que se añaden automáticamente al repositorio

Lo que se agregó automáticamente? Por lo que puedo recordar, siempre he tenido que agregar archivos manualmente. Si la herramienta que se agrega automáticamente está mal, entonces ¿quizás es mejor corregir esa herramienta?

menos que recordemos a excluirlo

¿Usted herramienta de generación de agregar un comentario diciendo "archivo autogenerado por $ HERRAMIENTA", y agrega un gancho de la subversión, que greps los archivos por el comentario y los rechaza. Haga provisiones adecuadas para las herramientas de generación de código; como: si el archivo contiene el comentario "autogenerado", agréguelo de todos modos si también tiene "rechazo de svn excepto" en un comentario en la (s) misma (s) línea (s).

¿Y cómo puede saber si tiene el último archivo generado?

Al generarlo a partir de la última receta, que está en el último compromiso de subversión.

+0

+1. Usar grep para verificar automáticamente la autogeneración es una buena idea. –

0

Otra buena estratagema es no escribir código en los archivos generados. Mantenlos separados Entonces, sin importar quién los genere, no importará.

Mantenga su lógica fuera de un archivo generado.

+0

No creo que el autor estuviera hablando de ** editar manualmente el código fuente autogenerado **, que es algo que se debe evitar como la peste. –

0

Nombre generado archivo algo así como "className.autoGenerated.cs" y agregar recursivo svn: ignorar atributo con el patrón de nombre correspondiente "* .autoGenerated.cs".

Cuestiones relacionadas