with subversion software guide full commands branches and git git-svn

subversion - migrate svn to git with branches



Git-SVN con mĂșltiples sucursales? (3)

El repositorio de subversión de nuestra empresa es un poco complicado: tenemos un diseño "predeterminado" básico con troncales, etiquetas y sucursales. Sin embargo, dentro de las sucursales, tenemos un directorio de "trabajo" que contiene más sucursales. Algo como esto:

  • sucursales / release_1_0_x
  • sucursales / release_1_1_x
  • ramas / trabajo / dave / topic_one
  • ramas / trabajo / tom / topic_two
  • ramas / trabajo / algo_else

Ahora, ¿cómo puedo hacer que git-svn reconozca todos esos (y algunos más) como ramas separadas? Parece que git svn init solo acepta una ubicación de sucursal, sin embargo, la invoco.

Edición : así es como inicialicé el repositorio de git:

git svn clone -s --prefix=svn/ http://svn.company.com/product/


De acuerdo con la respuesta a otra pregunta , lo mejor es usar Git 1.6.xy aprovechar la "clonación profunda".

Si no puede actualizar a 1.6.x, entonces puede especificar múltiples ramas cuando clone.

git svn clone -s --prefix=svn/ -b branches -b branches/work/dave -b branches/work/tom ...

Deberá asegurarse de agregar información para nuevos usuarios a su .git / config antes de "git svn fetch" cuando se haya agregado una nueva rama de usuario.


Para aquellos que buscan hacer esto de forma retroactiva, la página de manual de git-svn para 1.7.x 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/*


Puede agregar múltiples entradas de ramas y etiquetas en su configuración de git-svn, incluso de forma retroactiva. Entonces, si las sucursales SVN normalmente viven en branches/* en su repositorio SVN (es decir, un diseño estándar), pero también tiene branches/summer-students/* , puede configurarlo en .git/config como a continuación:

[svn-remote "svn"] url = svn+ssh://svn.example.com fetch = trunk:refs/remotes/trunk branches = branches/*:refs/remotes/* tags = tags/*:refs/remotes/tags/* branches = branches/summer-students/*:refs/remotes/svn-summer-students/*

A la izquierda de : está la ruta en el Repos de SVN, y a la derecha está la ruta que aparecerá como en tu lista de sucursales remotas de git. Puede usar refs/remotes/* repetidamente para que todo aparezca como una rama remota de nivel superior, pero tenga cuidado con las colisiones de nombres: romperán las cosas (por lo tanto, svn-summer-students lugar de svn-summer-students de summer-students , que ya existen).

Después de editar la configuración, debe eliminar .git/svn/.metadata y ejecutar git svn fetch para actualizar la lista de sucursales y .git/svn/.metadata . git branch -r debería mostrar las ramas adicionales. Si obtienes errores, busca nombrar colisiones.

Los documentos de git svn tienen algunos ejemplos más de la especificación de rutas a través de comodines o expresiones si tiene un diseño de SVN funky.