Pregunta

Quiero convertir un proyecto CVS a Subversion, usando cvs2svn. Tiene un tronco principal (HEAD), con varias ramas de desarrollo temporales creadas a partir del tronco.

Antes de convertirlo, fusionaremos los últimos cambios del tronco en todas las ramas de desarrollo. Pero también tendrán cambios que aún no se han fusionado nuevamente en el tronco.

Cuando convierto el proyecto a SVN, no tendrá ninguna de las propiedades del historial de fusión. Entonces, ¿cómo puedo inicializar esas propiedades, para luego poder fusionarme desde y hacia las ramas?

En otras palabras, después de la conversión, habrá una serie de diferencias entre el tronco y cualquier rama dada. La próxima vez que me fusione desde el tronco a la rama, no quiero ver esas diferencias como cambios que deben fusionarse. Pero cuando me fusiono de la rama al tronco, lo hago. ¿Es esto posible?

ACTUALIZACIÓN : Tomé la sugerencia de mhagger y le dije a SVN que las ramas ya tenían todos los cambios fusionados desde el tronco:

svn co [branch URL] .
svn merge --record-only [trunk URL]
svn commit -m ''

Esto funciona, por lo que la próxima vez que intente fusionarme desde el tronco a una rama, no mostrará nuevos cambios.

Pero todavía tengo un problema con --integrar fusiones, desde la rama de regreso al tronco. Termina mostrando muchos archivos R colocados, lo que significa que la troncal tiene un archivo X y la rama tiene un archivo X, pero no se consideran el mismo archivo. Esto hace que la fusión sea un poco desordenada, aunque parece terminar con los resultados correctos.

Creo que esto sucede debido a la siguiente secuencia de eventos:

  • Se creó una sucursal (en CVS)
  • Se agregó un archivo X al tronco (en CVS)
  • X se fusionó en la rama (también en CVS)
  • El proyecto se convirtió a Subversion
  • Subversion no sabía que la rama / X se había copiado de la troncal / X. Por lo que piensa que es un reemplazo.

El historial de SVN se parece a esto:

r100: create branch (copied from trunk)
r200: add trunk/X
r300: add branch/X (because of a CVS merge, but it's not a SVN copy)

Entonces, ¿hay alguna manera de decirle a Subversion que ignore los archivos ' ascendencia al hacer una fusión --reintegrate? ¿O una mejor manera de convertir estos archivos?

¿Fue útil?

Solución 2

Bien, creo que tengo una solución alternativa para el problema de reintegración anterior, en caso de que alguien esté interesado.

Según este documento , si yo he fusionado la última versión del tronco en la rama, hacer una reintegración es esencialmente lo mismo que hacer esto en el tronco:

svn merge [trunk URL] [branch URL]

Pero esta sintaxis permite --no ignorar-ascendencia, que --integrar no lo hace. Entonces puedo hacer:

svn merge --ignore-ancestry [trunk URL] [branch URL]

Eso me muestra los mismos resultados que un --reintegrate, sin todos los archivos "R" reemplazados. La única otra diferencia parece ser las propiedades de mergeinfo. No estoy seguro de si estos serán correctos, por lo que probablemente sea mejor eliminar la rama después, tal como lo haría después de un - reintegrate.

Otros consejos

Como probablemente sepa, cvs2svn no genera metadatos de fusión, excepto la información implícita sobre el origen de las ramas. (No puede, porque CVS no registra dicha información). Entonces, después de la conversión, tendrá que informar explícitamente a Subversion sobre las fusiones que se realizaron bajo CVS.

La forma más fácil de hacerlo es mediante el uso de " svn merge --record-only ... " ;, como se describe en el libro de Subversion .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top