Pregunta

Tengo un repositorio de subversion con el siguiente diseño:

svnrepo/projectA/trunk
svnrepo/projectA/tags
svnrepo/projectA/branches
svnrepo/projectB/trunk
svnrepo/projectB/tags
svnrepo/projectB/branches


que me gustaría mover a un repositorio mercurial con un diseño revisado:
hgrepo/proyectoA
hgrepo/proyectoB

Cual es la mejor manera de hacer esto?Algunos de mis pensamientos son:

Opción 1

Reorganice las rutas en subversion (usando svn move) a un formato intermedio:

svnrepo/trunk/projectA
svnrepo/trunk/projectB
svnrepo/tags/projectA
svnrepo/tags/projectB
svnrepo/branches/projectA
svnrepo/branches/projectB

luego hg convert en svnrepo/trunk.¿Esto confundirá la importación de hg?

opcion 2hg convierte cada uno de los proyectos/troncales en repositorios de hg separados.Luego combínelos en un único repositorio de hg (usando hg init, hg pull -f projectA, etc.).Creo que esto perderá los nombres de las ramas y las etiquetas del primer proyecto importado.

¿Fue útil?

Solución

En Mercurial, el almacenamiento de bases de código no relacionadas en el mismo repositorio es una mala idea porque

  • Significativamente complicar fusión. Fusiones dependerá de los cambios realizados en todos proyectos, en lugar de sólo el proyecto que estamos tratando de fusionar.
  • almacenamiento Causa y los gastos generales de pago - Mercurial, por lo que yo sé, no es compatible con el registro de salida sólo los subdirectorios de un repositorio. Habría que se ramifican todos los proyectos a la vez.

La solución es convertir su repositorio Subversion única en múltiples repositorios de Mercurial. La mayoría de las herramientas de conversión apoyan esto.

Otros consejos

Cada proyecto debe estar en su propio repositorio de Hg (para poder obtener o etiquetar solo un proyecto específico).

Recuerde que el directorio que ve en Subversion (troncal, etiquetas, ramas) no existirá en ningún (D)VCS moderno, donde las ramas y etiquetas son ciudadanos de primera clase (es decir,metadatos gestionados directamente por la herramienta), a diferencia de un simple directorio resultante de una copia barata (en SVN).

Eso significa que cuando convierte un repositorio SVN, no debe almacenar directamente ningún directorio "troncal", "etiquetas" o "sucursales" en el historial del repositorio de Hg.

Más bien deberías usar un herramienta como hgsubversion para importar su repositorio SVN (como simplemente "repositorio/proyectoA") a un repositorio de Hg dedicado al proyectoA.mantendrá etiquetas y ramas del proyecto SVN original y las convertirá en objetos Hg.
De su documentacion:

Todas las actualizaciones usando hgpullsvn se crean en la rama nombrada desde el último componente de la URL SVN (por ejemplo, si la URL SVN es svn://server/myproj/branches/feature-ZZZ, hgpullsvn creará y utilizará la rama nombrada 'feature-ZZZ')


Si no desea "convertir" sino "sincronizar", tonfa recomendar hgsubversion, aunque "se encuentra actualmente en un estado de cambio debido a una intensa refactorización":

Ahora mismo es no listo para uso en producción.Sólo deberías usar esto si estás listo para hackearlo y sumergirte en las partes internas de Mercurial y/o Subversion.

Desde hgsvn También permite cierta sincronización a través de hgpushsvn y hgpullsvn...me quedaría con hgsvn por ahora.

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