Copia de trabajo XXX bloqueada y error de limpieza en SVN

582

Me sale este error cuando hago un svn update:

Copia de trabajo XXXXXXXX bloqueada Ejecute el comando "Limpieza"

Cuando ejecuto la limpieza, me sale

La limpieza no pudo procesar las siguientes rutas: XXXXXXXX

¿Cómo salgo de este ciclo?

Dan
fuente
55
También recibí este mensaje. Las respuestas proporcionadas parecían un poco tediosas (especialmente la más votada). Simplemente cerré VS y volví a abrir la solución y pude verificar todo muy bien.
oscilatingcretin
El siguiente comentario de eakkas para eliminar entradas de la tabla WORK_QUEUE usando el Administrador SQLLite de Firefox me solucionó el problema.
zepelín
12
Hay una respuesta simple, solo marque la opción "romper bloqueos" y eso limpiará su copia de trabajo
Farhan

Respuestas:

517

Un enfoque sería:

  1. Copie los elementos editados a otra ubicación.
  2. Elimine la carpeta que contiene la ruta del problema.
  3. Actualice la carpeta que contiene a través de Subversion.
  4. Copie sus archivos o combine los cambios según sea necesario.
  5. Cometer

Otra opción sería eliminar la carpeta de nivel superior y volver a pagar. Sin embargo, espero que no llegue a eso.

Chuck
fuente
123
Haga un +1 a usted para que esta solución solucione no solo el problema del OP (y el mío), sino también para dar los 5 pasos que parecen solucionar cualquier problema de svn. -1 a subversion para las soluciones necesarias.
pxl
34
Si bien esto funciona técnicamente, es una forma tan mala de hacerlo en comparación con la eliminación de las cerraduras que merece un voto negativo.
Jukka Dahlbom
8
No puedo hacer el paso 3 porque ... "La copia de trabajo ya está bloqueada"
Evgeny
20
Considere el consejo de BradS "Para mí, el truco fue ejecutar 'svn cleanup' en la parte superior de mi copia de trabajo, no en la carpeta donde había estado trabajando todo el tiempo antes de que ocurriera el problema".
Marco
55
Para aquellos que usan Tortoise SVN, puede ejecutar la limpieza en la carpeta raíz del directorio de salida y forzar Break Locks. Además, puede pedirle que elimine los archivos no versionados. Entonces tome una actualización.
Obaid
476

Para mí, el truco consistía en ejecutar svn cleanupen la parte superior de mi copia de trabajo, no en la carpeta donde había estado trabajando todo el tiempo antes de que ocurriera el problema.

BradS
fuente
por lo general funciona pero ya no funciona, no estoy seguro si es porque actualicé a SVN 1.7
Populus
44
esto funcionó para mí con un cliente que ejecuta 1.7, aunque el servidor todavía es 1.6.x
Mark Hosang
Trabajó para mí en 1.7 muy apreciado
scarpacci 01 de
1
He combinado la sugerencia de la respuesta de Intu con esta: busque la carpeta principal que tiene un archivo "lock" en su carpeta .svn, luego ejecute "svn cleanup" allí. Eso funcionó para mí.
rob74
55
Esto funciona para mí, mucho más rápido que el de Chuck. Vale la pena intentarlo primero.
Goamn
210

Mire en su .svncarpeta, habrá un archivo llamado lock. Elimine ese archivo y podrá actualizar. Puede haber más archivos de bloqueo en el .svndirectorio de cada subdirectorio. Necesitarán eliminar también. Esto podría hacerse como un lote simplemente desde la línea de comandos con, por ejemplo,

find . -name 'lock' -exec rm -v {} \;

Tenga en cuenta que está editando manualmente archivos en la .svncarpeta. Han sido puestos allí por una razón. Esa razón podría ser un error, pero si no, podría estar dañando su copia local.

FUENTE: http://www.svnforum.org/2017/viewtopic.php?p=6068

Intu
fuente
8
+1 Creo que este es un enfoque mucho mejor que la respuesta más votada actualmente: odio tener que copiar los archivos en otro lugar primero para solucionar este problema (¡común!). El mío fue causado por una herramienta de generación de código que genera archivos con el mismo nombre que alguien más ya había agregado a SVN. Mi mal por no "svn up" primero, supongo ...
Alpian
44
Esto ya no funciona con Tortoise / SVN 1.7 (o al menos no pude encontrar ningún archivo de bloqueo ya que ahora hay una base de datos centralizada con los metadatos).
pesche
10
aquí hay una línea rápida que debería eliminar recursivamente todos los bloqueos que comienzan en el directorio actual:find . | grep ".svn/lock" | xargs rm
Jesse
1
Con SVN 1.7, la respuesta de @ BradS parece más efectiva. Esta respuesta no funcionó para mí, y la de BradS sí.
Ira Baxter
1
En mi caso no hay ningún archivo de bloqueo en ningún lado.
Tim MB
106

En mi caso, lo resolví eliminando manualmente un registro en el registro de bloqueo de archivo ".svn \ wc" de SQLite en la tabla WC_LOCK.

Abrí el archivo "WC" con el editor SQLite y ejecuté

delete from WC_LOCK

captura de pantalla que muestra todas las entradas depuradas de WC_LOCK

Después del comentario de eakkas , es posible que también deba eliminar todas las entradas de la WORK_QUEUEtabla.

Gad D Lord
fuente
1
Esto funcionó para mí para Subversion 1.7.5 en Windows. Versión de prueba de SQLite Expert descargada desde aquí: sqliteexpert.com/download.html . Ejecutó la instrucción sql "eliminar" arriba en la pestaña SQL.
M Katz
Esto es mucho mejor, solo una diferencia es que hice clic en el botón rojo (-)
Rohit Srivastava
3
Un DI SQL Spy gratuito también haría el truco: yunqa.de/delphi/doku.php/products/sqlitespy/index
Ivelin Nikolaev
12
Esto también funcionó para mí, pero también necesitaba purgar las entradas en la tabla
WORK_QUEUE
66
No funcionó eliminando el elemento de WC_LOCK: lo que funcionó fue mirar el contenido de blob de mi elemento WORK_QUEUE y, efectivamente, era el archivo de problema: eliminé el archivo del navegador de repositorios y luego eliminé el elemento work_queue, después de esto corrió una limpieza y de vuelta en el negocio!
GregM
95

La forma más fácil que nunca:

  1. Vaya al directorio principal (carpeta) del proyecto .
  2. Pres clic derecho
  3. Presione TortoiseSVN y luego presione Limpiar ...
  4. El diálogo de limpieza aparecerá automáticamente
  5. Seleccione Clean up working copy status, Break locks, Fix time stamps, Vacuum pristine copies, Refresh shell overlays,Include externals
  6. Pres OK

Hiciste tu trabajo con éxito.

Verifique las capturas de pantalla para su referencia.

Primer paso:

ingrese la descripción de la imagen aquí

Segundo paso: habilite la opción Bloquear bloqueo (segunda casilla en la ventana emergente de limpieza) ingrese la descripción de la imagen aquí

Espero que esto te ayude mucho.

Hiren Patel
fuente
10
en mi caso, la opción "Romper bloqueo" era suficiente, quizás intente primero solo con esta
Donatello
Buena respuesta. Tuve un caso de "ceguera al diálogo" con este y nunca verifiqué las opciones de limpieza. Históricamente, el 'navegar a la raíz y limpiar' solía funcionar, pero supongo que romper las cerraduras fue suficiente en mi caso ...
Phil Cooper
1
¡Trabajó para mí también!
Daniel Silva
No pensé que 'romper cerraduras' lo haría, porque no hice ninguna cerradura. Pero aparentemente rompe los bloqueos internos svn que estaban causando este problema. ¡Gracias!
Basher
No funcionó para mí 😦
Chimpanzee
48

Un colega en el trabajo ve constantemente este mensaje, y para él es porque eliminó un directorio bajo el control de versión de SVN sin eliminarlo de SVN, y luego creó un nuevo directorio en su lugar, no bajo control de versión, con el mismo nombre.

Si este es tu problema ...:

Hay diferentes formas de solucionarlo, dependiendo de cómo / por qué se reemplazó el directorio.

De cualquier manera, es probable que necesite:

A) Cambie el nombre del directorio existente a un nombre temporal

B) Realice una reversión de SVN para recuperar el directorio eliminado del sistema de archivos, pero no del SVN

A partir de ahí, ya sea

A) Copie los archivos relevantes en el directorio que fue eliminado

B) Si tuviera un cambio significativo de los contenidos en el directorio, hacer un SVN borrar en el original, cometió, y cambiar el nombre de su nuevo directorio de volver al nombre deseado, seguido de un SVN añadir a conseguir que uno bajo el control de versiones.

Matt
fuente
1
Su segundo paso B) me parece una muy mala idea, ya que rompería el historial de revisiones de los elementos del directorio original que se mantienen en la nueva versión.
Dunaril
Las cosas muy malas sucedieron cuando la persona eliminó un directorio versionado del sistema de archivos pero no de SVN. La respuesta anterior puede no ser una recuperación perfecta, pero es una recuperación.
Teemu Leisti
34

Para mí, ninguna de las soluciones anteriores funcionó. Encontré una solución rompiendo las cerraduras. Cuando realicé la limpieza de svn, seleccioné "Romper bloqueos" junto con "Limpiar el estado de la copia de trabajo".

ingrese la descripción de la imagen aquí

LoveForDroid
fuente
Para mí, el bloqueo del navegador repositorio Tortoise SVN funcionó. Romper el bloqueo en la carpeta desprotegida no hizo nada.
Bhargava Mummadireddy
23

Este me funcionó.

  1. Ve a la carpeta raíz,
  2. Clic derecho y limpieza
  3. Verifica todas las opciones disponibles
  4. Presiona OK

Después de la limpieza, le permitirá actualizar a la última versión.

lanza
fuente
2
Esto también funciona para mí. Debe verificar todas las opciones disponibles (6 entradas en mi versión) para proceder a la limpieza; se produce un error si solo marca las opciones [Limpiar el estado de la copia de trabajo] y [Incluir elementos externos].
Vincent Jia
1
Esto funcionó totalmente para mí ... simplemente haciendo clic derecho en proyecto> Equipo> Limpieza. No he tenido que eliminar ninguna fila del SQL en .svn ni nada más. Solo esto hizo el trabajo. ¡Gracias!
msqar
Esto funcionó para mí también en la versión 1.7.4 de TortoiseSVN. Fui con las casillas de verificación predeterminadas que se presentaron.
slm
Me ayudó hoy, pero no necesitaba verificar todas las opciones disponibles. Los últimos tres que revirtieron mis cambios no los verifiqué, y funcionó de todos modos. Consulte también stackoverflow.com/a/35192644/460775
EMBarbosa
1
Esto funcionó para mí. Acabo de comprobar Clean up working copy statusy Breaks lockseInclude externals
Phiber
11

Para mí, en realidad fue culpa de Tortuga, más o menos. Tortoise simplemente se quejó de "no se puede limpiar, ejecutar la limpieza", pero cuando ejecuté la línea de comando (svn cleanup), me dijo claramente que no podía eliminar algunos archivos que estaban en uso, la solución para la cual era obvia. Una vez que cerré Visual Studio (que mantenía los archivos abiertos), la limpieza funcionó bien.

Otros programas también pueden mantener abiertos los archivos en el repositorio que causa este problema. Excel manteniendo un xls abierto fue un culpable en otro caso, por lo que puede ser conveniente cerrar todos los programas que puedan estar usando algo en el repositorio o incluso reiniciar para forzar el cierre de los programas y luego intentar nuevamente la limpieza.

Mark Sowul
fuente
7

Tuve este problema porque las carpetas externas no quieren vincularse a una carpeta existente. Si agrega una línea de propiedad svn: externals donde el destino es una carpeta existente (versionada o no versionada), obtendrá el error de Bloqueo de copia SVN Woring. Aquí una limpieza también le dirá que todo está bien, pero aún así la actualización no funcionará.

Solución: elimine la carpeta problemática del repositorio y realice una actualización en la carpeta raíz donde se establece la propiedad svn: externals. Esto creará la carpeta y todo estará bien nuevamente.

Este problema surgió para mí porque svn: externals para archivos requiere que la carpeta de destino esté controlada por la versión. Después de notar que esto no funciona en diferentes repositorios, cambié de archivos externos a carpetas externas y me metí en este lío.

Oliver Zendel
fuente
6

La forma más fácil de hacer esto es mostrar carpetas ocultas y luego abrir la carpeta .SVN. Debería ver un archivo de cero KB llamado "bloqueo" al eliminar esto solucionará el problema

fawefawefa
fuente
5

Me encontré exactamente el mismo problema usando SVN 1.7 y ninguna de las correcciones mencionadas anteriormente funcionó.

Ante todo, asegúrese de hacer una copia de seguridad de todo su contenido editado.

Después de pasar un par de horas (no volví a descargar todo ya que mi rama tiene más de 6 gb de tamaño), descubrí que hay un archivo db llamado "wc" en la carpeta .svn de su rama.

Abra el archivo db con cualquier administrador de db (utilicé el complemento de administrador sqlite de firefox) y navegue a la tabla WC_LOCK. Esta tabla tendrá las entradas para los bloqueos adquiridos. Elimine los registros de la tabla y ya está :)

Rohan
fuente
A pesar de que era casi un duplicado de la respuesta anterior, le di un voto porque mencionó el complemento de administrador SQLite de Firefox.
Ehambright
3

Cuando tengo este problema, encuentro que ejecutar el comando de limpieza directamente en la ruta del problema generalmente parece funcionar. Luego ejecutaré la limpieza desde la raíz de trabajo nuevamente, y se quejará de algún otro directorio. y solo repito hasta que deje de quejarse.

Stephen
fuente
1
No pude encontrar un archivo de bloqueo como con las respuestas anteriores, pero esto funcionó para mí :)
serenskye
3

Si está en una máquina con Windows, vea el repositorio a través de un navegador y puede ver dos archivos con el mismo nombre de archivo pero con diferentes casos. Subversion distingue entre mayúsculas y minúsculas y Windows no lo es, por lo que puede obtener un bloqueo cuando Windows piensa que está tirando hacia abajo el mismo archivo y Subversion no. Elimine los nombres de archivos duplicados en el repositorio e intente nuevamente.

toxaq
fuente
3

Lo hice simplemente creando una nueva carpeta, revisando el proyecto, copiando los archivos actualizados a la nueva carpeta.

Fue arreglado con un nuevo pago y envío.

Don
fuente
Yo hice lo mismo. (Puse la causa raíz a AnkhSVN jugando con mi copia de trabajo. AnkhSVN ahora está desinstalado).
Scotty.NET
2

¿Está utilizando TortoiseSVN y acaba de actualizar? He tenido ese problema antes al pasar de 1.4 a 1.5 y no reiniciar. (Intenta reiniciar).

La razón por la que necesita reiniciar es porque el archivo de caché se vuelve completamente original.

De lo contrario, para continuar, exporte esa copia de trabajo a una nueva carpeta (no copie las carpetas ocultas .svn), vuelva a pagar el proyecto y mueva todo su código de nuevo, luego continúe con su confirmación.

Adán
fuente
Esto también me sucedió a mí, es solo que necesitaba reiniciar
Matthew Lock
2

simplemente elimine las carpetas .svn, luego ejecute una limpieza en el directorio principal. ¡¡Funciona perfectamente!!

Ben
fuente
3
En SVN 1.7, esto no funcionará porque solo hay una carpeta .svn, en la parte superior. Si se elimina, se elimina el archivo adjunto al repositorio.
AnneTheAgile
2

En Versiones bajo Mac OS: Acción -> Limpiar bloqueos de copia de trabajo en ...

HotJard
fuente
2

A menudo tengo ese problema. Mi patrón que causa problemas de limpieza.

  1. Abro el archivo de imagen en el visor.
  2. Borro el archivo / carpeta de imagen.
  3. Estoy intentando comprometer / actualizar

Cerrar el visor de imágenes donde se abre el archivo eliminado resuelve el problema. Quizás otro software pueda bloquear la limpieza de la misma manera.

En general. Creo que reiniciar la computadora puede ayudar en tales casos.

Dmitry Borisov
fuente
1

SVN normalmente actualiza su estructura interna (.svn / prop-base) de los archivos en una carpeta antes de que los archivos reales se obtengan del repositorio. Una vez que se recuperan los archivos, esto se borrará. Con frecuencia, se produce el error porque la "actualización" falló o se canceló prematuramente durante el progreso de la actualización.

  1. Verifique que los archivos estén listados en el directorio .svn / prop-base
  2. Eliminar cualquier archivo que no esté debajo de la carpeta
  3. Limpiar
  4. Actualizar

Ahora la actualización debería funcionar.

lud0h
fuente
1

Tuve el mismo problema porque exporté una carpeta en una carpeta controlada por versión. Tuve que eliminar la carpeta de TortoiseSVN, luego eliminar la carpeta del sistema de archivos (TortoiseSVN no le gustan las subcarpetas no versionadas ... ¿por qué no ???)


fuente
Debo agregar que exporté una carpeta A LA MISMA CARPETA ... así es como la versión anterior. carpetas versionadas
1

Iniciar búsqueda ... Bloquear ... Seleccione todos los archivos enumerados y elimínelos ... arreglados

Ryan
fuente
1

lo siguiente debe hacer:

estado de svn | grep ". L" | sed 's /.* (. *) $ / \ 1 /' | awk '{longitud de impresión ($ 1), $ 1}' | sort -nr | awk '{print "pushd" $ 2 "; svn cleanup; popd"}' | sh

alimentador de errores
fuente
1

¡No elimines tu solución!

en la carpeta .svn tiene un archivo llamado bloqueo, tiene 0 bytes de longitud

Puede eliminar todos estos archivos de todas las carpetas .svn en su solución y funcionará

Funcionó en mi caso

Paraca
fuente
¡Esta es la solución más simple! Trabajó para mí
Nathan
Sí, desafortunadamente no funciona para la última versión de SVN. Para la última versión, debe eliminarlo porque ya no hay un archivo de bloqueo. parece que ya no hay archivos, hay otra estructura de carpetas. Si alguien sabe si hay algo que aún pueda modificarse de una manera similar a la anterior, compártelo con nosotros.
Para
1

La descompresión en sitio de los archivos y un nuevo pago en la misma ubicación me han resuelto este problema.

En TortoiseSVN, para realizar una desversión en el lugar, arrastre hacia la derecha la carpeta raíz de la copia de trabajo de la lista de archivos en el árbol del directorio y elija "Exportar elementos versionados SVN aquí" en el menú emergente. TortoiseSVN se da cuenta de que el destino es el mismo que el de origen y sugiere deshacer la conversión de la copia de trabajo.

Después de la descompresión, realice un nuevo pago en la misma carpeta (que ahora contiene una copia no versionada de todos los archivos que tenía). TortoiseSVN le advertirá que está ingresando a una carpeta existente, pero puede continuar.

Después de esto, las limpiezas, actualizaciones y otras operaciones funcionaron sin problemas. Dado que los dos pasos anteriores preservan las modificaciones locales, no debería haber ninguna pérdida de información (pero respaldar la copia de trabajo antes de que esto sea una buena idea).

Una advertencia: si la copia de trabajo contiene versiones mixtas o cambios de propiedad no confirmados, esa información se perderá. Para mí, esto no es una ocurrencia común, y dada la elección de una copia de trabajo corrupta o la pérdida de cambios de propiedad no confirmados, tiendo a optar por la última.

Magnus
fuente
1

Tuve este problema donde funcionaba la "limpieza", pero la "actualización" continuaría fallando. La solución que funcionó fue eliminar la carpeta en cuestión a través del Explorador de Windows, no la eliminación de TortoiseSVN (que marca la eliminación como algo para confirmar en el repositorio, y luego hice un "pago" para esencialmente "actualizar" la carpeta desde el repositorio.

Más información sobre la diferencia entre una eliminación de O / S y una eliminación de SVN aquí: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-rename.html

Notablemente:

Cuando TortoiseSVN → Eliminar un archivo, se elimina de su copia de trabajo inmediatamente y se marca para su eliminación en el repositorio en la próxima confirmación.

Y:

Si un archivo se elimina a través del explorador en lugar de usar el menú contextual TortoiseSVN, el cuadro de diálogo de confirmación muestra esos archivos y le permite eliminarlos del control de versiones también antes de la confirmación. Sin embargo, si actualiza su copia de trabajo, Subversion detectará el archivo que falta y lo reemplazará con la última versión del repositorio.

Xonatron
fuente
1

Si estás en Linux, prueba esto:

find "/the/path/to/your/directory" -name .svn -type d | xargs chmod 0777 -R

Luego ejecute el cleanupcomando en ese directorio, luego intente actualizar.

El amor de Ocde
fuente
1

Hice lo siguiente para solucionar mi problema:

  1. Cambió el nombre de la carpeta ofensiva colocando una "_" delante del nombre de la carpeta.
  2. Hizo una "limpieza" de la carpeta principal.
  3. Cambió el nombre de la carpeta ofensiva a su nombre original.
  4. Hizo un compromiso.
usuario1319487
fuente
1

En el explorador de soluciones, haga clic con el botón derecho en el proyecto, en el submenú de apertura, haga clic en subversión y seleccione limpieza. Resolverá el problema, como lo hizo para mí. Espero que funcione.

Nadeem Jamali
fuente
1

Para hacer la limpieza

  1. Elimine la carpeta .svn.

  2. Haga el svncheckout en la carpeta raíz.

  3. Intente realizar la operación de limpieza.

Esto resolvió mi problema.

Jayaguru
fuente