working with upstream unable migrar information from determine branches svn git git-svn clone

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/*