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

4 minutos de lectura

Clonacion de un repositorio Svn no estandar con Git Svn
Rob Wilkerson

Soy relativamente nuevo en Git, pero me resultó tan fácil trabajar con él en casa que me gustaría usarlo en el trabajo donde nuestros proyectos se almacenan en repositorios Svn. Desafortunadamente, los repositorios no son estándar y tengo problemas para clonarlos. Claro, todos tienen tronco, sucursales/ y etiquetas/, pero sucursales/ y etiquetas/ tienen subdirectorios antes de presionar el verdadero directorios de proyectos:

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 obtengo 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. Probé este enfoque además de varios trucos para modificar la configuración, pero nada me funciona.

¿Hay alguna forma de que pueda obtener los componentes clave de mi proyecto Svn no estándar en un repositorio local de git para que pueda moverme fácilmente entre ellos?

Muchas gracias.

ACTUALIZACIÓN: Debo agregar que no puedo hacer un cambio total 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 asumir hasta que me sienta mucho más cómodo con Git; Como mencioné, todavía soy bastante nuevo. Apenas he arañado la superficie de sus capacidades.

Clonacion de un repositorio Svn no estandar con Git Svn
Rob Wilkerson

Lee B tenía razón. La respuesta, proporcionada por doener en #git, es actualizar Git a 1.6.x (había estado usando 1.5.x). 1.6.x ofrece clonación profunda para que se puedan usar múltiples comodines con el --branches opción:

$ 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 información, todos.

Clonacion de un repositorio Svn no estandar con Git Svn
VonC

¿podrías intentarlo? svn2git de nirvdrum (parece el más actualizado) para importar su svn a un repositorio de git?
(A principios de 2009, Paul mencionó esto svn2git de iteman en reemplazo de este svn2git original de jcoglanque fue, como mencionó su autor: “un truco rápido para sacar mi código de Subversion”)

Es mejor que git svn clone porque si tienes este codigo 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 confirmaciones para crear un nuevo repositorio de git.
Eso importará todas las sucursales y etiquetas como sucursales svn remotas, mientras que lo que realmente desea son sucursales locales nativas de git y objetos de etiquetas 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 haya terminado 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 pretende ser un viaje de ida.

Siempre puedes volver a tu repositorio svn, con… git2svn (además presente allí)

La idea sigue siendo:

  • SVN en funcionamiento como repositorio central.

  • Git “otro lugar” para experimentar rápidamente entre varias ramas privadas de Git.

  • volver a importar solo consolidó las sucursales de Git en sucursales oficiales de SVN.

  • Vi este comentario en otra publicación que era similar a mi problema. Desafortunadamente, no creo que esto funcione (aunque definitivamente echaré un vistazo más de cerca a svn2git). Necesito interactuar directamente con los repositorios Svn. Hay otros miembros del equipo que no están preparados para Git.

    –Rob Wilkerson

    21 de febrero de 2009 a las 12:34

  • +1: tuve problemas similares 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 github.com/iteman/svn2git/tree/maestro.

    – Pablo

    21 de febrero de 2009 a las 17:58

  • @VonC: ¿cómo reiniciar el clon si se interrumpió debido a la falta de disponibilidad de la red?

    – notionquest

    28/09/2016 a las 15:43

  • @notionquest 7 años después, no estoy muy seguro de cómo lo logré (no creo que tuviera ese problema en ese entonces): es mejor hacer una nueva pregunta, con la versión exacta de SVN, Git, svn2git y OS usado.

    – VoC

    28/09/2016 a las 15:46

  • creó una nueva pregunta stackoverflow.com/questions/39751091/…

    – notionquest

    28/09/2016 a las 15:59

1646955846 160 Clonacion de un repositorio Svn no estandar con Git Svn
joshua

Para diseños de repositorios no servidos por comodines simples: (de mi respuesta a esta pregunta relacionada)

los página de manual actual de git-svn dice:

También es posible obtener un subconjunto de ramas o etiquetas utilizando una lista de nombres separados por comas entre 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/*

  • Seguí tus pasos y obtuve 1 etiqueta migrada. Me gustaría repetir lo mismo para el próximo par de etiquetas. Intenté agregar la tercera etiqueta {1.0,2.0, 3.0} y ejecutar git svn fetch. Pero no está obteniendo nada del repositorio. ¿Me estoy perdiendo algo?

    – notionquest

    28/09/2016 a las 15:41

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad