Clonación de un repository de Svn no estándar con Git-Svn

Soy relativamente nuevo en Git, pero me ha resultado tan fácil trabajar en casa que me gustaría usarlo en el trabajo, donde nuestros proyectos se almacenan en repositorys Svn. Lamentablemente, los repositorys son un poco no estándar y tengo problemas para clonarlos. Claro, todos tienen trunk, branches / y tags /, pero las branches / y tags / tienen subdirectorys antes de llegar a los directorys reales del proyecto:

trunk/ branches/maintenance/release1 branches/maintenance/release2 ... branches/development/feature1 branches/development/feature2 ... tags/build/build1 tags/build/build2 ... tags/release/release1 tags/release/release2 

Después de la clonación:

 $ git svn clone -s --prefix=svn/ https://mydomain.com/svnproject $ git branch -r development development@1340 maintenance maintenance@1340 tags/build tags/build@1340 tags/release tags/release@1340 trunk trunk@1340 

No recibo ninguna de las twigs o tags del proyecto real. De hecho, necesito poder trabajar en el tronco, una twig de mantenimiento y una twig de desarrollo. He intentado este enfoque además de varios hacks para modificar la configuration, pero nada funciona para mí.

¿Hay alguna manera de que pueda get los componentes key de mi proyecto Svn no estándar en un repository git local para poder moverme fácilmente entre ellos?

Muchas gracias.

ACTUALIZACIÓN: Debo añadir que no puedo hacer un cambio al por mayor a Git (todavía). Hay otros miembros del equipo involucrados y una presencia internacional. La logística de la transición es más de lo que estoy dispuesto a emprender hasta que me sienta más cómodo con Git; como mencioné, todavía soy bastante nuevo. Apenas he arañado la superficie de sus capacidades.

Lee B tenía razón. La respuesta, provista por doener en #git, es actualizar Git a 1.6.x (he estado usando 1.5.x). 1.6.x ofrece una clonación profunda para que se puedan usar varios comodines con la opción --branches :

 $ git svn clone https://svn.myrepos.com/myproject web-self-serve \ --trunk=trunk --branches=branches/*/* --prefix=svn/ $ git branch -r svn/development/sandbox1 svn/development/feature1 svn/development/sandbox2 svn/development/sandbox3 svn/development/model-associations svn/maintenance/version1.0.0 svn/trunk 

Exactamente lo que necesitaba. Gracias por la idea, todo.

¿Podría probar el svn2git de nirvdrum (parece el más actualizado) para importar su svn a un repository de git?
(A principios de 2009, Paul mencionó el svn2git de este iteman en reemploop del svn2git de este jcoglan original , que fue, como su autor mencionó: "un truco rápido para sacar mi código de Subversion")

Es mejor que git svn clone porque si tienes este código en svn:

  trunk ... branches 1.x 2.x tags 1.0.0 1.0.1 1.0.2 1.1.0 2.0.0 

git-svn revisará el historial de commit para build un nuevo repository git.
Importará todas las twigs y tags como twigs de svn remotas, mientras que lo que realmente quieres son twigs nativas de git y objects de label git .
Entonces, después de importar este proyecto, obtendrías:

  $ git branch * master $ git branch -a * master 1.x 2.x tags/1.0.0 tags/1.0.1 tags/1.0.2 tags/1.1.0 tags/2.0.0 trunk $ git tag -l [ empty ] 

Después de que svn2git termine con su proyecto, obtendrá esto en su lugar:

  $ git branch * master 1.x 2.x $ git tag -l 1.0.0 1.0.1 1.0.2 1.1.0 2.0.0 

Por supuesto, esta solución no es un viaje de ida.

Siempre puedes volver a tu repository svn, con … git2svn (también presente allí )

La idea permanece:

  • SVN en el trabajo como un repository central.

  • Git "en otro lugar" para experimentar rápidamente entre múltiples twigs privadas de Git.

  • importar de nuevo solo las twigs consolidadas de Git en las sucursales SVN oficiales.

Para layouts repo no servidos por comodines simples: (de mi respuesta a esta pregunta relacionada )

La página actual de git-svn dice:

También es posible search un subset de twigs o tags utilizando una list de nombres separados por comas dentro de llaves. Por ejemplo:

 [svn-remote "huge-project"] url = http://server.org/svn fetch = trunk/src:refs/remotes/trunk branches = branches/{networking,green}/src:refs/remotes/branches/* tags = tags/{1.0,2.0}/src:refs/remotes/tags/*