2009-02-21 31 views
37

Soy relativamente nuevo en Git, pero me ha resultado tan fácil trabajar en casa que me gustaría usarlo en el trabajo donde se almacenan nuestros proyectos en repositorios Svn. Lamentablemente, los repositorios son un poco no estándar y tengo problemas para clonarlos. Por supuesto, todos ellos tienen tronco, ramas/y etiquetas /, pero las ramas/y etiquetas/tienen subdirectorios antes de llegar a los reales directorios proyecto:Clonación de un repositorio Svn no estándar con Git-Svn

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 
    [email protected] 
    maintenance 
    [email protected] 
    tags/build 
    tags/[email protected] 
    tags/release 
    tags/[email protected] 
    trunk 
    [email protected] 

me sale ninguno 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.

Respuesta

34

Lee B estaba en lo cierto. La respuesta, provista por doener en #git, es actualizar Git a 1.6.x (he estado usando 1.5.x). 1.6.x ofrece la clonación profunda para que varios comodines se pueden utilizar 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.

+0

+1 para la opción de clonación profunda – VonC

13

¿Podría probar nirvdrum's svn2git (parece ser el más actualizado) para importar su svn en un repositorio de git?
(principios de 2009, Paul mencionado este iteman's svn2git en sustitución de esta original jcoglan's svn2git, que era, como su autor mencionó: "un corte rápido para conseguir mi código a cabo de la subversión")

Es mejor que git svn clone porque si usted tiene 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 pasarán por la historia comprometerse a construir un nuevo repositorio git.
Es importará todas las ramas y etiquetas como ramas de svn remotas, mientras que lo que realmente quiere es git-native local branches y git tag objects.
Así que después de la importación de este proyecto, se llega a:

$ 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 svn2git se hace con su proyecto, que obtendrá de esta forma:

$ 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 es no pretende ser un viaje de ida.

Siempre puede volver a su repositorio svn, con ...git2svn (también present there)

La idea permanecen:

  • SVN en el trabajo como un repositorio central.

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

  • importación espalda ramas Git sólo se consolidan en ramas oficiales de subversion.

+0

vi este comentario en otro post que era similar a mi problema. Desafortunadamente, no creo que esto funcione (aunque definitivamente voy a echar un vistazo más de cerca a svn2git). Necesito interactuar directamente con los repos de Svn. Hay otros miembros del equipo que no están listos para Git. –

+0

+1 - Tuve un problema similar cuando estaba aprendiendo git, hasta que configuré un nuevo repositorio usando svn2git y los problemas desaparecieron. Una versión más actualizada está disponible en http://github.com/iteman/svn2git/tree/master. – Paul

+0

@VonC - ¿Cómo reiniciar el clon si se interrumpió debido a la falta de disponibilidad de la red? – notionquest

9

para los diseños de reporto que no son atendidas por los comodines de civil: (de my answer a this related question)

El current git-svn manpage dice:

También es posible acceder a un subconjunto de ramas o etiquetas mediante el uso de un lista de nombres separados por comas dentro de las 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/* 
+0

He seguido sus pasos y obtuve 1 etiqueta migrada. Me gustaría repetir lo mismo para las próximas dos etiquetas. Intenté agregar la tercera etiqueta {1.0,2.0, 3.0} y ejecutar git svn fetch. Pero no está obteniendo nada de repo. ¿Me estoy perdiendo algo? – notionquest

Cuestiones relacionadas