Eliminando, moviendo y renombrando

Al contrario que CVS, Subversion le permite renombrar y mover ficheros y carpetas. Por tanto hay entradas de menú para borrar y renombrar en el submenú TortoiseSVN.

Figura 5.28. Menú contextual del explorador para ficheros versionados

Menú contextual del explorador para ficheros versionados


Eliminando ficheros y carpetas

Utilice TortoiseSVNEliminar para eliminar ficheros o carpetas de Subversion.

Cuando TortoiseSVNElimina un fichero, se elimina de su copia de trabajo inmediatamente, a la vez que se marca para su borrado en el repositorio para la próxima confirmación. La carpeta padre del fichero muestra un icono sobreimpresionado de “eliminado”. Hasta que confirme el cambio, puede recuperar el fichero utilizando TortoiseSVNRevertir sobre la carpeta padre.

Cuando se utiliza TortoiseSVNEliminar sobre una carpeta, ésta continúa en su copia de trabajo, pero la sobreimpresión cambia para indicarle que está marcada para ser eliminada. Hasta que confirme el cambio, puede recuperar la carpeta utilizando TortoiseSVNRevertir sobre la propia carpeta. Esta diferencia en el comportamiento entre ficheros y carpetas es parte de Subversion, no de TortoiseSVN.

Si desea eliminar un ítem del repositorio, pero mantenerlo localmente como un fichero o carpeta no versionados, utilice Menú contextual extendidoEliminar (mantener local). Debe mantener pulsada la tecla Mayús mientras hace click con el botón derecho sobre el ítem en el panel de lista de exploración (panel derecho) para ver esto en el menú contextual extendido.

Si se borra un fichero utilizando el Explorador en vez de usar el menú contextual de TortoiseSVN, el diálogo de confirmación le muestra esos ficheros y le deja eliminarlos del control de versiones antes de confirmar. Sin embargo, si actualiza su copia de trabajo, Subversion se dará cuenta de que falta un fichero y lo reemplazará con la última versión del repositorio. Si necesita borrar un fichero bajo control de versiones, utilice siempre TortoiseSVNEliminar para que Subversion no tenga que averiguar qué es lo que realmente quiere hacer usted.

Si se borra una carpeta utilizando el Explorador en vez de utilizar el menú contextual de TortoiseSVN, su copia de trabajo se romperá y no podrá confirmar. Si actualiza su copia de trabajo, Subversion reemplazará la carpeta que falta con la última versión del repositorio, y luego podrá eliminarla de la forma correcta, utilizando TortoiseSVNEliminar.

Recuperando un fichero o una carpeta borrados

Si ha borrado un fichero o una carpeta y ya ha confirmado esa operación de borrado en el repositorio, entonces un comando TortoiseSVNRevertir normal no los podrá recuperar. Pero el fichero o la carpeta borrados no están perdidos para siempre. Si sabe la revisión en la que se borraron el fichero o la carpeta (si no lo sabe, utilice el diálogo de registro para averiguarlo), abra el navegador de repositorios y cambie a esa revisión. Luego seleccione el fichero o la carpeta que ha borrado, haga click con el botón derecho y seleccione Menú ContextualCopiar a..., y como destino de esa operación de copia seleccione la ruta de su copia de trabajo.

Moviendo ficheros y carpetas

Si desea simplemente renombrar en el sitio un fichero o una carpeta, utillice Menú contextualRenombrar... Introduzca el nuevo nombre para el ítem, y ya está.

Si quiere mover ficheros dentro de una copia de trabajo, quizás a una subcarpeta distinta, utilice el manejador de arrastrar-y-soltar con el botón derecho del ratón:

  1. seleccione los ficheros o directorios que desea mover

  2. arrástrelos con el botón derecho a su nuevo destino dentro de la copia de trabajo

  3. suelte el botón derecho del ratón

  4. en el menú contextual seleccione Menú contextualSVN Mover ficheros versionados aquí

Confirmar la carpeta padre

Dado que las operaciones mover y renombrar se realizan como un borrado seguido de un añadir, debe confirmar la carpeta padre de los ficheros movidos/renombrados para que se muestre la parte de borrado de la operación en el diálogo de confirmación. Si no confirma la parte eliminada de los ficheros movidos/renombrados, se quedarán en el repositorio, y cuando sus compañeros se actualicen no se eliminará el fichero antiguo, es decir, que ellos tendrán ambas copias, la antigua y la nueva.

Usted debe confirmar un cambio de nombre de carpeta antes de cambiar cualquier fichero dentro de la carpeta; si no, su copia de trabajo realmente puede quedar estropeada.

También puede utilizar el navegador de repositorios para mover ítems. Lea “El navegador de repositorios” para saber más.

No SVN Mueva externos

NO debería utilizar los comandos TortoiseSVN Mover o Renombrar en una carpeta que ha sido creada utilizando svn:externals. Esta acción puede provocar que el ítem externo se elimine de su repositorio padre, probablemente molestando a muchas otras personas. Si necesita mover una carpeta externa, debería moverla como lo hace con el resto de ficheros sin versionar, y luego ajustar las propiedades svn:externals de las carpetas padres origen y destino.

Cambiando las mayúsculas/minúsculas en un nombre de fichero

Hacer cambios sólo en las mayúsculas/minúsculas de un nombre de fichero es complicado en Subversion sobre Windows, porque durante un corto periodo de tiempo durante el renombrado, ambos nombres de fichero deben existir. Dado que Windows tiene un sistema de ficheros que no distingue mayúsculas y minúsculas, esto no funciona utilizando el habitual comando Renombrar.

Afortunadamente hay (al menos) dos soluciones posibles para renombrar un fichero sin perder su historia de registro. Es importante renombrarlo dentro de Subversion. ¡Renombrarlo únicamente en el explorador corromperá su copia de trabajo!

Solución A) (recomendada)

  1. Confirme los cambios en su copia de trabajo.

  2. Renombrar el fichero de MAYusculas a mayUSCULAS directamente en el repositorio utilizando el Navegador de Repositorios.

  3. Actualice su copia de trabajo.

Solución B)

  1. Renombre de MAYusculas a MAYusculas_ con el comando Renombrar del submenú de TortoiseSVN.

  2. Confirme los cambios.

  3. Renombre de MAYusculas_ a mayUSCULAS.

  4. Confirme los cambios.

Lidiando con conflictos en las mayúsculas/minúsculas de un nombre de fichero

En el caso de que tenga dos ficheros en el repositorio con el mismo nombre pero diferenciándose únicamente en las mayúsculas (por ejemplo, TEST.TXT y test.txt), ya no podrá actualizar u obtener el directorio padre en un cliente de Windows. Aunque Subversion soporta los nombres de ficheros que se distinguen en las mayúsculas, Windows no.

Esto ocurre a veces cuando dos personas confirman, desde copias de trabajo separadas, ficheros tales que tienen el mismo nombre pero con las mayúsculas/minúsculas diferentes. Esto también puede ocurrir cuando se confirman los ficheros desde un sistema con un sistema de ficheros que distingue mayúsculas/minúsculas, como Linux.

En ese caso, necesita decidir cuál desea mantener y borrar (o renombrar) el otro en el repositorio.

Evitando dos ficheros con el mismo nombre

Hay un script gancho de servidor disponible en: http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ que evitará confirmaciones cuyo resultado sea dos ficheros con conflicto en las mayúsculas.

Reparando renombrados de ficheros

A veces su amistoso IDE renombrará ficheros por usted como parte de un ejercicio de refactorización, y por supuesto no se lo dirá a Subversion. Si intenta confirmar sus cambios, Subversion verá el nombre de fichero antiguo como faltante y el nuevo nombre como fichero no versionado. Podría simplemente confirmar el nuevo nombre de fichero para añadirlo, pero entonces perdería la traza de la historia, ya que Subversion no sabe la relación entre los ficheros.

Una forma mejor es notificar a Subversion de que el cambio es realmente un renombrado, y puede hacer esto dentro de los diálogos Confirmar y Comprobar modificaciones. Simplemente seleccione tanto el nombre de fichero antiguo (faltante) como el nuevo nombre (no versionado) y utilice Menú contextualReparar movimiento para emparejar los dos ficheros como un renombrado.

Eliminando ficheros no versionados

Normalmente especifica un la lista de ignorados tal que todos los ficheros generados se ignoran en Subversion. Pero ¿y si lo que quiere es limpiar todos esos ítems ignorados para producir una compilación limpia? Normalmente lo haría en su makefile (fichero de instrucciones de compilación), pero si está depurando el makefile, o cambiando el sistema de compilación, es útil tener una forma de barrer la casa.

TortoiseSVN proporciona exactamente esa opción utilizando Menú contextual extendidoEliminar ítems no versionados.... Debe mantener pulsada la tecla Mayús mientras hace click con el botón derecho sobre el ítem en el panel de lista de exploración (panel derecho) para ver esto en el menú contextual extendido. Esto mostrará un diálogo que lista todos los ficheros no versionados en cualquier lugar de su copia de trabajo. Ahí podrá seleccionar o deseleccionar ítems para ser eliminados.

Cuando dichos ítems se eliminan, se utiliza la papelera de reciclaje, por lo que si comete un error aquí y borra un fichero que debería haber estado versionado, aún puede recuperarlo.