2011-05-12 14 views
19

Tengo una serie de proyectos git creados como clones de repositorios SVN usando git-svn. Hemos migrado nuestros repositorios SVN a un nuevo proveedor, por lo que la URL ahora ha cambiado. ¿Cómo puedo actualizar la URL SVN remota de mi clon git?Cómo cambiar los repositorios svn usando git-svn?

Una posibilidad es que vuelva a clonar desde el nuevo repositorio de SVN, pero preferiría no hacerlo, ya que el proceso puede llevar días al extraer todo el historial.

Otra forma de plantear esta pregunta sería ¿dónde almacena git información sobre la ubicación del repositorio SVN remoto con el que está trabajando? Es decir. ¿De dónde viene la información de URL cuando escribe 'git svn info'?

+3

posible duplicado de [git-svn: ¿cuál es el equivalente a \ 'svn switch - reubicar \ '?] (http://stackoverflow.com/questions/268736/git-svn-whats-the-equivalent-to-svn-switch-relocate) – svick

+0

Posible duplicado de [git-svn: ¿cuál es el equivalente a \ 'svn switch --relocate \'?] (https://stackoverflow.com/questions/268736/git-svn-whats-the-equivalent-to-svn-switch-relocate) – Fritz

Respuesta

21

encontré una página en el wiki de Git que responde exactamente mi pregunta: ¿

https://git.wiki.kernel.org/index.php/GitSvnSwitch

  • Editar la URL url SVN-remota en .git/config para que apunte al nuevo nombre de dominio
  • Ejecutar git svn fetch - ¡Esto necesita recuperar al menos una nueva revisión de svn!
  • cambiar la URL svn-remoto de nuevo a la URL original
  • Ejecutar git svn rebase -l para hacer un rebase local (con los cambios que se produjeron en la última operación de extracción)
  • cambiar la URL svn-remoto de nuevo a la nueva url
  • Ejecutar git svn rebase ahora debería funcionar de nuevo!

Esto solo funcionará, si el paso de git svn fetch realmente obtiene cualquier cosa! (Me tomó un tiempo para descubrir que ... que tenía que poner en un maniquí revisión de nuestro repositorio SVN para que esto ocurra!)

+0

¿Cuál usaste? –

+1

Algunos enlaces en esa página están muertos ahora. Además, sería bueno si pudieras poner la solución real aquí, no solo el enlace. – GergelyPolonkai

+0

Puede (debería) aceptar también su propia respuesta. – peterh

5

Tras la same url [1], pero con una solución actualizada, se hace mucho más fácil .

Dentro .git/config, en la sección [svn-remote], establezca rewriteRoot a la edad URL y establezca url a la URL nueva:

[svn-remote "svn"] 
    url   = https://new.svn-server.net/svn/root 
    rewriteRoot = https://old.svn-server.net/svn/root 

Lo mismo se puede sin duda hacer a través de la git config ... comandos de la guía:

$ git config --local --replace-all svn-remote.<name>.rewriteRoot `git config --local --get svn-remote.<name>.url` 
$ git config --local --replace-all svn-remote.<name>.url <new_url> 

Entonces, simplemente funciona, para mí no tengo que hacer ninguna revisión ficticia aunque no haya nuevas revisiones en el nuevo servidor. Curiosamente, git svn info informa la misma URL de edad, pero con la nueva URL como repositorio raíz:

$ git svn info 
Path: . 
URL: <old-url> 
Repository Root: <new-url> 

[1] https://git.wiki.kernel.org/index.php/GitSvnSwitch

+0

esto funciona bien para mí –

Cuestiones relacionadas