¿Cómo migrar de un repositorio de subversión complicado a un sistema de control de versiones distribuido?

StackOverflow https://stackoverflow.com/questions/839683

Pregunta

Supongamos que tenemos un repositorio de subversión que se parece a

/original/0.1
/original/0.2
/variantA/trunk
/variantA/branches/who/branch_for_xxx
/variantA/branches/she/branch_for_yyy
/variantB/trunk
/variantB/branches/who/branch_for_zzz
(... 30 or 40 alike)

donde variantA y variantB son tenedores del software original.

Estoy buscando un método para migrar este repositorio a un sistema de control de versiones distribuido: un método

  • no necesariamente pesa un solo comando
  • para cualquiera de los sistemas de control de versiones distribuidos conocidos
  • haciendo que los dvcs piensen en ellas ramas: /official/{0.1,0.2} árboles, / variantA / tronco de árbol, ...
  • concienciar a los dvcs de la relación de herencia de esos árboles
¿Fue útil?

Solución

Si considera Git como un posible candidato de DVCS, el script ruby svn2git hace lo que necesita.

Más detalles en la pregunta: < strong> Clonación de un repositorio Svn no estándar con Git-Svn

Otros consejos

Mercurial viene con una extensión de conversión que debe hacer lo que quieras. Consulte los convertir los detalles de la extensión en el sitio web de Mercurial.

Para Git, consulte las instrucciones en http://github.com/guides/import- from-subversion

La última vez que lo hice manualmente, usé los siguientes comandos. (Esto era para un proyecto que no usaba etiquetas o ramas. Usar svn2git podría producir mejores resultados que git-svn si tiene etiquetas o ramas.)

cat "mysvnusername = Me Myself <me.myself@somewhere.com>" >> authors.txt

svnserve --daemon --foreground --root <SVN-REPO-PARENT-DIR>
git svn clone --stdlayout --authors-file=authors.txt --no-metadata svn://localhost/<SVN-REPO-NAME>

# push to a public repo and clone from there, to get push/pull working easily
cd <SVN-REPO-NAME>
git remote add origin git@github.com:mygithubusername/<GIT-REPO-NAME>.git
git push origin master
cd ..
rm -rf <SVN-REPO-NAME>

git clone git@github.com:mygithubusername/<GIT-REPO-NAME>.git

Pero como tiene un diseño de repositorio SVN no estándar, deberá especificar los parámetros --trunk, --tags y --branches en lugar de --stdlayout para git svn clone .

Para representar todo el historial de herencia de su repositorio, puede intentar reordenar su repositorio para que, en lugar de una jerarquía no estándar, tenga un diseño de repositorio plano estándar:

/branches/original-0.1
/branches/original-0.2
/branches/variantA-trunk
/branches/variantA-who-branch_for_xxx
/branches/variantA-she-branch_for_yyy
/branches/variantB-trunk
/branches/variantB-who-branch_for_zzz
...

Eso debería facilitar que las herramientas de importación entiendan el repositorio. Luego, cuando se hayan importado, puede reorganizarlos mejor dentro del nuevo repositorio.

Además, he oído que Git 1.6.x admite la clonación profunda, por lo que puede proporcionar parámetros a git svn clone como --branches = sucursales / * / * que buscará ramas en la jerarquía. Consulte esta publicación para ver un ejemplo de usarlo.

$ bzr svn-import --layout trunk1 svn-root-url bzr.repo

Debería hacer lo correcto. Debe tener instalado el complemento bzr-svn para poder hacer esto.

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