2010-05-02 28 views
24

Me gustaría deshacerme de SVN para Git. Mi configuración de repositorio SVN actual tiene proyectos en trunk (/trunk/projecta, /trunk/projectb, etc. con etiquetas y ramas en /tags/projecta-1.0, etc.). Me gustaría crear repositorios Git distintos para cada uno de estos proyectos sacándolos de SVN usando git-svn.Convertir subdirectorio SVN a Git

He retirado con éxito todo el repositorio de SVN a un repositorio de Git local, pero todos los proyectos existen en el mismo repositorio de Git ahora. ¿Es posible separarlos en este punto?

+0

He oído que hay una mejor-en-el-largo plazo opciones para convertir a la subversión de Git (git-svn porque está especializada por ser capaz de comprometerse espalda), pero don-git svn No tiene ninguna referencia a la mano. –

Respuesta

17

Esto es complicado. Para obtener, por ejemplo, las etiquetas para un proyecto, todas sus etiquetas deben estar bajo un directorio común, pero su estructura tiene todos los proyectos que comparten un solo directorio de etiquetas.

Tal vez podría mover a /tags/projecta-1.0 /tags/projecta/1.0 y así sucesivamente, y luego importar proyectos en git uno a la vez:

git-svn init --trunk=trunk/projecta --tags=tags/projecta ... 

No sé si esto funcionará como se esperaba, así que por favor haga esto en una copia de su repositorio, ¡no el original!

+1

No me preocupaban demasiado las etiquetas/ramas, así que esto funcionó a la ligera. Ejecuté esto en mi caja Ubuntu Lynx: "" "git svn clone --no-metadata --trunk = trunk/projecta http: // svn/repo projecta" "" – magneticMonster

+0

es bastante truco, la manera más fácil es crea dos nuevos proyectos git, y copia ProjectA y ProjectB a git repo correspondiente, pero esto perderá toda la historia :( – hugemeow

1

Cuando el diseño del repositorio es bastante complejo, hay una herramienta llamada svn2git que permite convertir un repositorio complejo con un conjunto de reglas.

Puede descargarlo aquí: http://gitorious.org/svn2git/ El programa necesita compilarse, necesita los archivos de encabezado Qt, Apache y SVN.

1

Otro programa para la conversión única del repositorio de Subversion es Svn2Git (diferente de la respuesta de vdboor), tiene menos dependencias e hizo un gran trabajo para mis repositorios.

4

Recientemente tuve que resolver este problema con un caso razonablemente complejo (extrayendo los archivos utahrle del historial general de BRL-CAD para hacer un proyecto separado de GIT) y terminé usando svn2git con un archivo de reglas. Estos eran mis pasos - no estoy seguro si es la manera "correcta", pero parece haber tenido éxito en mi caso:

  1. Asegúrese svn2git está instalado, así como la subversión y GIT (activar el soporte git subversión si . no está ya presente) Nota que parece que hay varios programas que utilizan el nombre del proyecto svn2git - el que he utilizado es la siguiente:

    http://www.gitorious.org/svn2git

    este artículo de KDE me inició:

    http://techbase.kde.org/Projects/MoveToGit/UsingSvn2Git

  2. Obtenga la copia local de su repositorio svn. Tenga en cuenta que este no es pago del repositorio, sino una copia completa de el conjunto de datos de repo SVN. Sourceforge hace esto posible con una opción rsync - ver sus documentos para más detalles: http://sourceforge.net/p/forge/documentation/rsync%20Backups/. No soy seguro sobre otros sitios.

    mkdir svn_repo 
    cd svn_repo 
    rsync -av svn.code.sf.net::p/PROJECTNAME/MOUNTPOINT . 
    cd .. 
    
  3. Crear mapa de identidad entre committers SVN y Git committers

    archivo: cuenta-mapa

    svnname1 Jane Coder <[email protected]> 
    svnname2 Joe Techwriter <[email protected]> 
    
  4. crear reglas de filtrado svn2git para capturar la historia utahrle. Voy a publicar el ejemplo utahrle completo aquí que muestra cómo seguir la historia en torno a entre diferentes directorios, pero yo esperaría mayoría de los casos no serían bastante este mal:

    archivo: reglas

    create repository utahrle 
    end repository 
    
    match /brlcad/trunk/libutahrle/ 
        min revision 1 
        max revision 22796 
        repository utahrle 
        branch master 
    end match 
    
    match /brlcad/trunk/tools/ 
        min revision 1 
        max revision 22814 
        repository utahrle 
        branch master 
    end match 
    
    match /brlcad/trunk/src/other/libutahrle/ 
        min revision 22797 
        repository utahrle 
        branch master 
    end match 
    
    match /brlcad/trunk/src/other/URToolkit/ 
        min revision 22815 
        repository utahrle 
        branch master 
    end match 
    
    match/
    end match 
    
  5. Ejecutar svn-all-rápido-exportación para generar archivos (svn_repo es el directorio que contiene su copia completa de los archivos de subversión):

    sVN-toda-rápido-exportación --identity-mapa de ruta cuenta - reglas de reglas svn_repo

  6. Utilizando el archivo de reglas anterior, utahrle contiene el repositorio git resultante. Use gitk para verificar que el historial que esperamos ver esté realmente presente, luego (si está utilizando este repositorio como un archivo fuente en línea ) utilice los procedimientos estándar sourceforge para cargar un repositorio git existente.