svn - subir - ¿Dividir el repositorio de Subversion en múltiples repositorios de Mercurial?
svn checkout (3)
Estamos migrando de Subversion a Mercurial y nos hemos topado con un bache en el proceso de conversión SVN-> Hg. En este momento, nuestro único repositorio SVN contiene código para un par de "proyectos" distintos, y nos gustaría separarlos en el proceso de migración. Nuestro repositorio SVN se organiza como:
.
|-- proj1
| |-- branches
| |-- tags
| `-- trunk
`-- proj2
|-- branches
|-- tags
`-- trunk
y nos gustaría simplemente hacer de proj1
y proj2
sus propios proj2
Hg. Por supuesto, nos gustaría que el historial específico de proj1
aparezca en el registro de proj2
. En este momento, cuando hg convert
realiza la conversión, simplemente lee todos los archivos de forma bastante tonta, sin distinguir siquiera las ramas de los troncales.
¿Cuál es el proceso para filtrar por directorio y reconocer sucursales SVN en hg convert
?
¡Lo tengo funcionando ahora, gracias a la página wiki de ConvertExtension !
Probé el método de Ry4an, pero vino con las desventajas de tener que convertir primero el repositorio SVN en un repositorio Mercurial intermedio antes de dividir todo, y que las ramas, el tronco y las etiquetas no se reconocían porque hay dos proyectos, cada uno con su propio Ramas, tronco y etiquetas.
Descubrí que la especificación manual del directorio de ramas, troncales y etiquetas funcionaba muy bien para convertir un proyecto de SVN a Mercurial a la vez:
hg /
--config convert.svn.trunk=proj1/trunk /
--config convert.svn.branches=proj1/branches /
--config convert.svn.tags=proj1/tags /
convert --authors authors.txt original-svn-dir hg-proj1
Esto se encargará de reconocer las ramas, etiquetas, troncales y filtros de proj1
revisiones de solo proj1
al mismo tiempo. Entonces, simplemente lo repetí para proj2
.
Esto se hace fácilmente usando la extensión ''convertir'' como usted sugirió. Aquí está el procedimiento:
- haga un
hg convert SVNREPO all-in-one-mercurial-repo
de svn a mercurial con todo -
hg convert --filemap projectfilemap.txt all-in-one-mercurial-repo project-repo
- uno por proyecto
Esos filemaps tienen en ellos lineas como:
exclude proj1
rename proj2 .
Ese sería el filemap utilizado para extraer el repo de dos proyectados del repositorio de mercurial todo en uno. Es posible que deba listar cada archivo individual en esos mapas, pero creo que los directorios están bien.
Hay otra pregunta aquí en SO donde respondí casi lo mismo y pegué en un ejemplo completo, pero eso debería ser suficiente para que se ponga en marcha.
Otra forma de resolverlo sería usar svnadmin dump y svndumpfilter para dividir el repositorio de svn en un nuevo repositorio de svn por proyecto como se describe en la documentación de svn. División de repositorios mediante el filtrado de la historia del repositorio