2011-03-10 14 views
5

Comencé a usar Git el año pasado y lo he disfrutado tanto que estoy considerando cambiar mi repo más grande y más activo de Subversion. Desafortunadamente, ese repositorio contiene varios proyectos (relacionados, pero independientes).¿Migrar un repositorio de subversión multiproyectos con un tronco común a Git?

Hay muchas, muchas páginas que describen cómo convertir un acuerdo de recompra de un solo proyecto, pero muchos menos de los repos de múltiples proyectos. De hecho, sólo he found un few, y todos ellos parecen asumir que cada proyecto tiene su propio tronco:

project1/ 
    branches/ 
    tags/ 
    trunk/ 
project2/ 
    branches/ 
    tags/ 
    trunk/ 
project3/ 
    branches/ 
    tags/ 
    trunk/ 

Lamentablemente, mi Subversion repo es como la siguiente:

branches/ 
    *empty* 
tags/ 
    project1-0.9/ 
    project1-1.0/ 
    project1-1.0.1/ 
    project2-0.9/ 
    project2-0.9.1/ 
    project3-0.5/ 
trunk/ 
    project1/ 
    project2/ 
    project3/ 

Peor aún, todas las etiquetas se crean a partir de la copia de trabajo (por ejemplo, svn copy . svn://example.com/svn/tags/project1-1.0.2), por lo tanto, incluya pequeños cambios que nunca se hayan realizado en el enlace troncal (principalmente números de versión de codificación fija). Además, hay un puñado de commits que abarcan todos los proyectos (actualizaciones de licencia, etc.). Afortunadamente, al menos, ¡no hay fusiones!

¿Hay una manera limpia para desenredar estos proyectos, manteniendo mis etiquetas? Si esto ayuda, esta sería una conversión de una vía, con el repositorio de Subversion desconectado después.

Respuesta

2

que utilizan http://gitorious.org/svn2git/svn2git hacer la misma cosa. Esta herramienta fue creada originalmente para convertir el enorme repositorio KDE SVN a Git, que BTW también se presenta como su repositorio. Todo lo que tiene que hacer es escribir un archivo de control simple que describa qué directorios corresponden a qué proyecto y rama. Al final, tienes un buen conjunto de repositorios git para tus proyectos.

Una nota sin embargo: no hay soporte directo para etiquetas SVN. Tendrás que importarlos como ramas de Git y postprocesarlos, cf. http://gitorious.org/svn2git/svn2git/blobs/master/samples/merged-branches-tags.rules.

+0

Esta herramienta parece prometedora, pero no puedo por mi propia vida hacer que compile. : -/ –

+0

Lo usé en un entorno Linux y no tuve problemas para compilarlo. Mirando src/src.pro, solo puedo suponer que los desarrolladores originales no tenían incentivos para soportar otras plataformas, ya que este relleno usa las rutas linux típicas para bibliotecas compartidas. En Linux necesita Qt y los archivos de desarrollo para SVN para compilarlo. – sebasgo

+0

Sí, estoy ejecutando Ubuntu Server y no quiere instalar libqt4-devel sin instalar también X11. \ * rolls eyes \ * Y, por supuesto, no se compilará en absoluto en Windows. Todavía estoy tratando de encontrar una tercera opción. :-) –

0

http://repo.or.cz/w/svn-all-fast-export.git parece tener extensos archivos de reglas que pueden solucionar su repositorio. Sé el uso de git-svn (bidireccional) que se puede podar las partes sustanciales del repositorio SVN sin problemas (incluyendo ignorando partes de una confirmación debido a la raíz SVN señalando profundamente en el repositorio o mediante --ignore-paths).

Después de realizar su nueva operación se puede utilizar para atar el git-submodule de nuevo juntos si hay referencias cruzadas.

+0

No consigo que git-svn omita las etiquetas, p. Ej. project2 y project3 al clonar project1. '--ignore-paths' no parece hacer el truco. –

Cuestiones relacionadas