2010-08-26 27 views
112

Si ejecuto svn rm file, el archivo se elimina de la copia de trabajo local.¿Cómo eliminar un archivo del control de versión sin eliminarlo?

Lo que hago ahora es:

$ cp file file2 
$ svn rm file 
$ svn ci 
$ mv file2 file 

¿Cómo evito SVN también la eliminación del archivo local cuando utilice svn rm?

+0

posible duplicado de [SVN Eliminar archivo del repositorio sin eliminar copia local] (http://stackoverflow.com/questions/542065/svn-remove-file-from-repository-without-deleting-local-copy) – Shai

Respuesta

250

Quiere la opción de línea de comando --keep-local. Esto elimina el archivo del control de la versión sin eliminarlo de su sistema de archivos.

$ svn rm --keep-local my_important_file 
+2

Won ¿Todavía lo eliminan de los sistemas de otras personas una vez que se actualizan? – Nyerguds

+1

@Nyerguds Eso es correcto, ya que svn rm está eliminando los archivos del repositorio. En el caso de que desee eliminar archivos del repositorio, PERO manténgalos localmente en su máquina, entonces usaría la bandera de arriba. –

+3

@GregHilston Como dije, sin embargo, eso realmente no ayuda en los proyectos de múltiples programadores. Debería haber una forma de simplemente desvelar el archivo en todas partes. El caso más común aquí son los archivos de configuración local accidentalmente comprometidos (muy comunes en los proyectos de Java), pero al deshacerlos no deberían borrarse los archivos de configuración de otros usuarios. – Nyerguds

-1

no tengo una respuesta a esta pregunta precisa, pero tengo una respuesta a una pregunta relacionada, que es cómo eliminar todos los archivos (es decir, no una específica) en un directorio del control de versiones sin eliminándolos localmente. Esta solución proviene de una implementación científica de Linux.

ls -a .svn

debería mostrar el directorio SVN que almacena los datos de control. Simplemente:

rm -r .svn

se librará de este directorio. Entonces, al escribir:

svn status

producirá una 'advertencia: este directorio no es una copia de trabajo' error, porque ya no está bajo el control de versiones.

Espero que esto ayude.

+0

¿Una pregunta relacionada? Eliminar un archivo y eliminar toda la copia de trabajo son cosas totalmente diferentes en mi humilde opinión. – Melebius

6

Eliminar un archivo de SVN sin eliminarlo localmente en ninguna parte es un problema común. Un ejemplo destacado es el archivo .classpath en un proyecto de Eclipse. Poner este archivo de configuración bajo SVN es maravilloso, siempre y cuando todas las máquinas utilizadas en el proyecto tengan la misma instalación de Eclipse y Java. Una vez que se viola esta condición, los commits empiezan a romper otros proyectos de Eclipse. Este es el punto que uno tiene que eliminar un archivo de SVN sin eliminarlo en ninguna parte.

svn rm --keep-local .classpath 

hace el trabajo perfectamente en una máquina y en ese momento.

El problema es que otras máquinas pueden perder ese archivo (en la actualización) o resucitarlo (en la confirmación). La falla de SVN no es para manejar --keep-local en el repositorio ni para propagarlo a otras copias de trabajo. Por lo tanto, en todas las demás máquinas, el comando debe ejecutarse — antes de cualquier confirmación o actualización.

Esto, por supuesto, funcionará el 90%, en el mejor de los casos. Las eliminaciones y nuevas versiones ocurrirán de forma repentina. Mi solución es que cada máquina, tengo acceso directo o indirecto a, hacer

svn rm --keep-local .classpath 
copy .classpath .classpath-nameOfTheMachine 
svn add .classpath-nameOfTheMachine 

Esto es tan pura y simple feo para ser apenas llamada una "solución". Sin embargo, siempre permitió reparaciones rápidas de cualquier accidente posterior.

Cuestiones relacionadas