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.