2012-04-22 17 views
6

He cambiado el nombre de una rama en el repositorio y sigo trabajando descuidadamente con la misma copia de trabajo (que se eliminó de esa rama antes del cambio de nombre). Cuando intenté comprometerme más tarde, me di cuenta de que la copia de trabajo todavía se está dirigiendo a la ruta anterior. Quiero comprometer los cambios a la nueva ruta en el repositorio, mientras que por supuesto mantener el historial, etc. ...SVN: cambio de nombre en el navegador Repo mientras se mantiene la Copia de trabajo sincronizada

¿SVN tiene una forma elegante de evitar esto?

He leído sobre los comandos Cambiar y reubicar, pero no estoy seguro de que ninguno de ellos se adapte completamente a mi problema (los escenarios descritos son diferentes), y siempre he tenido miedo de probar los comandos en el SVN. . ¿Alguien tiene experiencia con estos comandos?

Supongo que puedo solucionar el problema, por ejemplo, revisar el proyecto renombrado a otra copia de trabajo y luego sobrescribirlo con los cambios (todos además de los metadatos SVN). También puedo escribir una secuencia de comandos que encuentre todas las apariciones de la ruta anterior y las cambie brutalmente a las nuevas rutas, pero calculé que debe haber algún tipo de comando SVN para esto.

Gracias!

Respuesta

6

Si la URL del repositorio cambia, necesita reubicar su copia de trabajo. El comando switch se usa para cambiar la rama a la que apunta su copia de trabajo. Los conceptos en sí son bastante claros.

Pero hablas de proyecto y supongo que ese es el problema que estás enfrentando: no encontrarás ninguna referencia a los proyectos en la documentación de Subversion porque ese no es un concepto de Subversion.

No tenemos dos formas básicas para implementar proyectos en Subversion:

  1. crear un repositorio por proyecto:

    • https://example.com/svn/foo/trunk
    • https://example.com/svn/bar/trunk
  2. crear una rama por proyecto dentro del mismo repo sitory:

    • https://example.com/svn/projects/foo/trunk
    • https://example.com/svn/projects/bar/trunk

Así, cuando decimos "cambiar el nombre de un proyecto" que quiere decir o bien "cambiar el nombre de un repositorio" (# 1) o "cambiar el nombre de una rama" (# 2) y la solución es:

  1. svn relocate para vincular nuevamente su copia de trabajo con el repositorio
  2. O bien svn update para llevar los cambios a su copia de trabajo (si el cambio está dentro del árbol de directorios de copia de trabajo) o svn switch para cambiar la rama a la que apunta su copia de trabajo (si eliminó efectivamente la rama actual).

Actualización: Mi consejo hasta el momento es que empiezas desde cero. Cambie el nombre de su copia de trabajo actual, revise una nueva y vuelva a aplicar los cambios pendientes con una herramienta de comparación de archivos común como WinMerge o Kdiff3 (o TortoiseMerge). No hay beneficio en tratar de descubrir qué cambios exactos hizo si no son evidentes en el registro.

Para el futuro ... No es necesario que aprenda de memoria el libro completo de Subversion, pero debe conocer los conceptos básicos, esp. cuando han demostrado ser un problema en su trabajo diario.

+0

Bueno, solo he cambiado el nombre de un "directorio" en el árbol de repositorio, lo que probablemente significa que he cambiado el nombre de una sucursal (lo siento, soy un novato en esto). – myDisplayName

+0

con respecto a la reubicación de svn, suena la acción más adecuada, pero no cambié la URL de todo el repositorio, solo cambié el nombre de una rama, ¿seguirá funcionando bien? – myDisplayName

+0

Tampoco estoy seguro con respecto al modificador svn, tenga en cuenta que he realizado cambios en la copia de trabajo que quiero comprometer y tengo miedo de las relaciones entre Update y Switch. Svn cambiaría revertir mis cambios en el copia de trabajo? ¿Funcionará si el nombre de la rama original ya no existe? ¿Guardaría el historial de registro, etc. como de costumbre? – myDisplayName

0

Ha intentado utilizar el interruptor de SVN ..

switch --relocate OLDURL TO NEWURL 

que debería resolver su problema.

+0

Gracias, pero tengo miedo de usar esto porque solo renombré una rama en mi repositorio y por lo tanto no estoy seguro de que esto se adapte al escenario recomendado en el que utiliza este comando ... – myDisplayName

+0

Puede ser que simplemente puede usar un simple interruptor svn NEWURL. – khmarbaise

Cuestiones relacionadas