2008-11-03 14 views
11

Tengo una estructura de repositorio SVN como a continuación. Estamos utilizando niveles múltiples en las sucursales para varias ramas de mantenimiento de versiones, más un directorio para ramas de características.¿Cómo importo las ramas svn enraizadas en diferentes directorios en git usando git-svn?

git-svn init parece funcionar con un solo argumento de la raya, es decir, parece esperar que todas las ramas estén en una sola ubicación.

trunk 
branches 
    1.1 
    1.2.1 
    1.2.2 
    1.2 
    1.2.1 
    1.2.2 
    1.2.3 
    features 
    feature1 
    feature2 

¿Alguna idea sobre cómo manejar esto?

Gracias

+0

Probablemente esto ha cambiado desde 2008, pero hoy en día "puedes especificar más de una' '--tags'' y/o' '--branches'' opciones, en caso de que tu repositorio de Subversion coloque etiquetas o ramas en múltiples rutas " (citado de '' man git svn branch'') – steffen

Respuesta

13

En su archivo de configuración, ajuste la sección SVN-mandos a distancia para algo como:

[svn-remote "svn"] 
    url = svn://svnserver/repo 
    fetch = trunk:refs/remotes/trunk 
    branches = branches/*/*:refs/remotes/* 
    tags = tags/*:refs/remotes/tags/* 

Esto le debe permitir que agarrar las ramas anidadas.

+0

Esto resuelve completamente mi problema. He estado usando esto por un tiempo ahora. Sí requirió versiones posteriores de git y/o svn, lo siento, no sé los detalles, pero actualmente estoy usando git 1.6.2.5 y svn 1.5.1 y funciona bien con eso. – CaptainPicard

+0

¿dónde pongo esta configuración? –

+0

~/myrepo/.git/config :) –

0

¿Sería factible crear un acuerdo de recompra git para cada uno de los subdirectorios sucursales?

+0

Y luego, ¿qué? ¿fusionarlos todos y crear las ramas/etiquetas adecuadas después del hecho? Tiene que haber una solución más simple –

+0

La solución más simple sería aplanar sus directorios de sucursales en un único directorio, lo que no solo haría feliz a 'git', sino que también pondría su repositorio en línea con las convenciones' svn'. No estoy seguro de qué tan práctico es eso en tu caso. –

1

Por convención, las ramas de Subversion viven todas en una sola ruta de 'ramas' en el repositorio de Subversion, por lo que no me sorprende que git-svn haga esta suposición.

me gustaría sugerir lo siguiente (nota, es posible que pierda un poco de historia en esta operación):

  1. Aplanar la subversión branches caminos, utilizando una convención de nomenclatura para mantener identidades únicas y la idea de la estructura actual .
  2. Realizar git-svn
  3. Mueva las cosas en el repositorio git para cumplir con sus prácticas.

El peligro de losing history depende de qué tan bien git-svn sigue las operaciones de copia desde rutas diferentes. Me he encontrado con este problema al migrar repositorios de subversión (1.4-ish) recientemente.

+0

¿te refieres a flatten svn branches en mi computadora en el servidor svn (que no puedo)? –

0

Puede agregar múltiples controles remotos git svn para cada una de las ramas, o posiblemente cada uno de los directorios de las ramas. La inicial git svn fetch tomaría una eternidad, pero por lo que entiendo debería funcionar.

Cuestiones relacionadas