2009-04-14 18 views
40

Sé que puedes rastrear un svn repo con git usando git svn init, pero eso es para si quieres crear un nuevo repositorio.Añadir svn repo al repositorio git existente?

Mi situación es que actualmente ya tengo un repositorio git existente y quiero rastrear el tronco de un repositorio svn al convertirlo en una rama remota en mi actual repositorio git.

¿Alguna sugerencia?

+0

supongo que esta respuesta también es válido aquí: http: //stackoverflow.com/a/1430782/1046584 –

Respuesta

22

Después de buscar anoche, por fin he encontrado la respuesta:

http://i-nz.net/2009/01/15/selective-import-of-svn-branches-into-a-gitgit-svn-repository/

Parece que usted tiene que ir realmente y editar manualmente el archivo .git/config con el fin de añadir una rama SVN a un repositorio git existente. Entonces, de acuerdo con estas instrucciones, debería agregar una entrada para cada rama.

+1

Encontré este útil: * http://blog.tfd.co.uk/2008/11/21/adding-a-branch-to-git/ –

+0

Podría haber dejado de funcionar desde Git v1.8.3. 2, ver http://stackoverflow.com/questions/19712735/git-svn-cannot-setup-tracking-information-starting-point-is-not-a-branch –

+0

dejó de funcionar a partir de git v1.8.3.2 , vea la respuesta http://stackoverflow.com/a/38706530/3303668 para obtener una solución actualizada – Elmer

2

Esto es realmente lo que hace git svn init - los otros comandos de git svn simplemente combinan cosas, etc. Puedes git svn init y/o copiar el diseño de un repositorio SVN clonado con git svn clone, y deberías solo ser capaz de ingresar a una sucursal local, o buscar, y así sucesivamente. Tómese un tiempo con la página man para git svn y no debería tener demasiados problemas para armar algo juntos; si lo haces, #git on freenode es un buen recurso. Entonces, esto debería ser posible sin demasiados problemas, pero no sé exactamente cómo hacerlo todo.

+1

+1 para #git. Ha sido un gran recurso para mí en el pasado. – Abizern

+0

+1 para decir esto es lo que hace 'git svn init'. –

12

1) definir la nueva rama en .git/config:

[svn-remote "release-branch"] 
     url = svn+ssh://[email protected]/source/branches/mono-2-2/mcs 
     fetch = :refs/remotes/git-svn-release-branch 

2) importar los rama SVN. SVN_BRANCHED_REVISION es la revisión cuando la rama sucedió en SVN.

[~]$ git svn fetch release-branch -r SVN_BRANCHED_REVISION 

3) Conecta una rama local de Git a la rama remota:

[~]$ git branch --track release git-svn-release-branch 

5) Checkout y actualizar

[~]$ git checkout release 
[~]$ git svn rebase 
+0

¿Qué sucede si usted empuja su rama de rastreo sv sv al repositorio remoto de git? ¿Un clon adicional también obtendrá los upates en el archivo .git/config? – maxmelbin

+3

Parece que esta respuesta solo se copió y pegó en http://ivanz.com/2009/01/15/selective-import-of-svn-branches-into-a-gitgit-svn-repository/ –

3

Puede encontrar el SVN_BRANCHED_REVISION haciendo:

$ svn log --stop-on-copy PATH_TO_BRANCH 
1

Las respuestas para th es pregunta (https://stackoverflow.com/a/840411 y https://stackoverflow.com/a/7592152) ya no funciona a partir de Git v1.8.3.2 (https://stackoverflow.com/a/19833311). Usted puede hacer esto en su lugar:

1) Definir la nueva sucursal en .git/config:

[svn-remote "release-branch"] 
    url = svn+ssh://[email protected]/source/branches/mono-2-2/mcs 
    fetch = :refs/remotes/git-svn-release-branch 

2) Importe la rama SVN. SVN_BRANCHED_REVISION es la revisión cuando la rama sucedió en SVN.

$ git svn fetch release-branch -r SVN_BRANCHED_REVISION 

3) Crear ramas y conectar una rama local de Git a la rama remota:

$ git checkout -b release refs/remotes/git-svn-release-branch 

5) Actualización de

$ git svn rebase 
Cuestiones relacionadas