¿Cómo eliminar un archivo del control de versiones sin eliminarlo?

Respuestas:

277

Desea la --keep-localopción de línea de comandos. Esto elimina el archivo del control de versiones sin eliminarlo de su sistema de archivos.

$ svn rm --keep-local my_important_file

Nota: El --keep-localsolo afecta el svn rmde su copia. Otros usuarios pueden tener su propia copia local del archivo eliminado a menos que haya un conflicto entre su copia local y el repositorio debido a los cambios que han realizado. Este puede no ser el resultado deseado. Ver comentarios a continuación.

Andres Jaan Tack
fuente
44
¿No lo eliminará de los sistemas de otras personas una vez que se actualicen?
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.
Greg Hilston
66
@GregHilston Sin embargo, como dije, eso realmente no ayuda en proyectos reales de múltiples programadores. Debería haber una manera de simplemente descomprimir el archivo en todas partes. El caso más común aquí son los archivos de configuración locales que se han comprometido accidentalmente (muy común en proyectos Java), pero su desversión no debería borrar los archivos de configuración de otros usuarios.
Nyerguds
55
Los "proyectos reales de programadores múltiples" de @GregHilston estaban bastante implicados en los "sistemas de otras personas". El problema es este: otras personas se actualizan y se sobrescribe su configuración. Esto generalmente no es demasiado problemático, pero es lo suficientemente molesto como para querer resolverlo. Pero en ese momento, cuando ya han sobrescrito la configuración y ahora obtienen un svn "rm" en la actualización, en realidad elimina el archivo de configuración local potencialmente vital de su sistema, mientras que simplemente debe estar sin versión para que pueda configurarse como local ajustes de nuevo.
Nyerguds
44
Volver a cargar un archivo anterior desde el repositorio lo marca como de esa versión anterior, lo que significa que una actualización simplemente lo eliminará nuevamente. No hay una forma limpia de hacer esto que no requiera intervención manual en todas las máquinas del proyecto.
Nyerguds el
13

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 Eclipse. Poner este archivo de configuración en 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, las confirmaciones comienzan a romper otros proyectos de Eclipse. Este es el punto que uno tiene para eliminar un archivo de SVN sin eliminar ist 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 (al actualizar) o resucitarlo (al confirmar). La falla de SVN no es manejar --keep-localen el repositorio ni propagarlo a otras copias de trabajo. Por lo tanto, en todas las otras máquinas, el comando anterior debe ejecutarse, mejor antes de cualquier confirmación o actualización.

Esto, por supuesto, funcionará en un 90%, en el mejor de los casos. Las eliminaciones y las nuevas versiones sucederán de repente. Mi solución es tener todas las máquinas, tengo acceso directo o indirecto a, hacer

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

Esto es tan feo que casi no se le llama "solución". Sin embargo, siempre permitió reparaciones rápidas de cualquier accidente posterior.

Albrecht Weinert
fuente
-3

No tengo una respuesta a esta pregunta precisa, pero sí tengo una respuesta a una pregunta relacionada, que es cómo eliminar todos los archivos (es decir, no uno específico) en un directorio del control de versiones sin eliminarlos 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 deshará de este directorio. Luego escribiendo:

svn status

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

Espero que esto ayude.

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