with - Clonación de un repositorio de Svn no estándar con Git-Svn
svn to gitlab (3)
¿Podría probar el svn2git de nirvdrum (parece el más actualizado) para importar su svn a un repositorio de git?
(A principios de 2009, Paul mencionó el svn2git de este iteman en reemplazo 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 construir un nuevo repositorio git.
Importará todas las ramas y etiquetas como ramas de svn remotas, mientras que lo que realmente quieres son ramas nativas de git y objetos de etiqueta 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 repositorio svn, con ... git2svn (también presente allí )
La idea permanece:
SVN en el trabajo como un repositorio central.
Git "en otro lugar" para experimentar rápidamente entre múltiples ramas privadas de Git.
importar de nuevo solo las ramas consolidadas de Git en las sucursales SVN oficiales.
Soy relativamente nuevo en Git, pero me ha resultado tan fácil trabajar en casa que me gustaría utilizarlo en el trabajo, donde nuestros proyectos se almacenan en repositorios Svn. Lamentablemente, los repositorios son un poco no estándar y tengo problemas para clonarlos. Claro, todos tienen trunk, branches / y tags /, pero las branches / y tags / tienen subdirectorios antes de llegar a los directorios 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 ramas o etiquetas del proyecto real. De hecho, necesito poder trabajar en el tronco, una rama de mantenimiento y una rama de desarrollo. He intentado este enfoque además de varios hacks para modificar la configuración, pero nada funciona para mí.
¿Hay alguna manera de que pueda obtener los componentes clave de mi proyecto Svn no estándar en un repositorio 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.
Para diseños 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 buscar un subconjunto de ramas o etiquetas utilizando una lista 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/{red,green}/src:refs/remotes/branches/*
tags = tags/{1.0,2.0}/src:refs/remotes/tags/*