Estoy tratando de encontrar una estrategia viable para un siguiente problema.Subversion y dependencias
Tenemos varios proyectos web que dependen de nuestro marco. Todo está almacenado en nuestro SVN y tiene su propio proyecto con toda la estructura de directorios necesaria (troncales, etiquetas, ramas). En un ejemplo, tenemos proyectos webprj01 y webprj02 y tenemos un marco frm01. Todos ellos tienen estructura de proyecto SVN habitual: tronco, etiquetas, ramas.
webprj01 y webprj01 dependen de frm01 y en la vida real frm01 está presente como subdirectorio de webprj01 y webprj02. Para lograr esto en SVN, es posible establecer svn: propiedad externa y podemos configurar frm01 para apuntar a/frm01/trunk dentro de trunk de webprj01 y webprj02.
Para hacer una codificación de la vida real tenemos que tener los tres proyectos desprotegidos como una copia de trabajo y hacer los cambios a la base de código particular en su propia copia de trabajo. No hay forma de publicar cambios de webprj01/frm01 al SVN. El cambio debe hacerse en copia de trabajo frm01 y transferirse a través de SVN a copias de trabajo webprj01/frm01 y webprj02/frm01.
Esta solución tiene un problema con las dependencias durante la bifurcación. Realizo una rama de producción desde SVN/webprj01/trunk a /webprj01/branches/release-1.0.0. En dos días, mientras trabajaba en el segundo proyecto webprj02 y frm01, ya no puedo tener un checkout estable como a través de svn: external en branch release-1.0.0. El directorio frm01 ya apunta a nuevos cambios de frm01/trunk.
Descrito es solo una versión simplificada del problema. En nuestras situaciones de la vida real, las dependencias van a veces a cinco niveles de profundidad. Me gustaría poder obtener un código estable de SVN en cualquier momento. En diferentes palabras Cuando ramifiqué/etiqueté webprj01 como release-1.0.0. Quiero obtener un código estable para esa etiqueta en particular en un año desde la creación.
Es obvio que la estrategia descrita usando svn: externals no hace el trabajo. ¿Cuál sería tu experiencia con esta situación? No es necesario usar un solo pago. Incluso el uso de scripts de compilación u otra solución sería de ayuda aquí. Estoy buscando una solución a largo plazo al problema que no dependería en gran medida de las acciones humanas ya que somos propensos a cometer errores.
Estoy bastante seguro de que sus problemas pueden resolverse mejor cambiando de SVN a un sistema de control de versiones distribuidas, eso facilitará la bifurcación, especialmente cuando necesita una rama de producción donde solo se deben recopilar cambios en la corrección de errores. Pero no tengo suficiente experiencia con eso para escribirle un ejemplo completo de cómo eso lo ayudará. Tal vez le darás una oportunidad al tutorial de Joel (http://hginit.com/) y lo resolverás tú solo. –
Gracias. Estoy un poco asustado de eso, git, mercurial ... Pero ya lo estoy investigando. – user390133
Hola Stefan. Usamos externos en nuestro desarrollo. Tengo curiosidad de por qué no puedes "... publicar cambios de webprj01/frm01 en el SVN ..." Estoy constantemente modificando el código en el proyecto de verificación externa y comprometiéndolo en su lugar. Sin embargo, hay que ser consciente de algo, y todavía echo de menos esto de vez en cuando, es que no se puede comprometer toda la copia de trabajo de webprj01 y obtener frm01 para comprometerse también. Debería navegar a webprj01/frm01 y hacer otra confirmación. Pero aún así, es mucho más fácil que trabajar en frm01, comprometerse, luego saltar sobre webprj01 y hacer una actualización para integrar. Gracias, –