2010-07-01 34 views
45

Tengo un problema con el control de versiones en Subversion. Revisé una copia de trabajo del repositorio y obtuve bloqueos en todos sus archivos. Luego, sin soltar los bloqueos, he eliminado la carpeta del disco.¿Cómo puedo liberar bloqueos en Subversion recursivamente?

  • No puedo eliminar la carpeta del repositorio, ya que su tiene una cerradura
  • Si el yo y tratar de liberar los bloqueos de forma recursiva, se dice que no hay cerraduras para ser liberados.
  • En la vista Examinar repositorio, solo puedo romper los bloqueos en particular, no en las carpetas recursivamente.

¿Cómo puedo romper los bloqueos que residen en el repositorio? Estoy usando TortoiseSVN en Windows. ¿Hay un comando para romper bloqueos recursivamente para una carpeta?

+0

¿Ha intentado realizar una limpieza en su copia de trabajo? – khmarbaise

+0

Sí, lo había intentado. Borré mi copia de trabajo con los bloqueos intactos. Ahora si pago una copia de trabajo, no tendrá ningún bloqueo. – vikmalhotra

+0

Tu copia de trabajo ya no tiene bloqueos ... ¿los archivos/carpetas tienen bloqueos en el repositorio? – khmarbaise

Respuesta

54

Ok, lo tengo.

  • Lo que hice fue comprobar una copia de trabajo .
  • entonces entró menú del explorador, TortoiseSVN -> Comprobar si hay modificaciones ...
  • hizo clic en la tecla Comprobar repositorio
  • seleccionar todos los archivos, haga clic derecho y seleccione la opción bloqueo descanso.
  • Elimine la copia de trabajo y la en el repositorio. Voila! :)

Saludos

+1

Creo que esto solo funcionará si eres el usuario que bloqueó los archivos. Si robas el candado, creo que la línea de comando es tu única opción. – karmasponge

+3

Esto funcionó para mí: pude romper el bloqueo de otra persona. – Keith

+5

Solo SVN tomaría una función de base de datos (bloqueos) y lo forzaría a hacer una copia de trabajo local para romperlos ... – whitey04

15

Desde el advance locking section

$ svn status -u 
M    23 bar.c 
M O   32 raisin.jpg 
     *  72 foo.h 
Status against revision:  105 
$ svn unlock raisin.jpg 
svn: 'raisin.jpg' is not locked in this working copy 

Eso simplemente significa que el archivo no está bloqueado en su directorio de trabajo actual , pero si todavía está bloqueado en el nivel de repositorio, puede forzar el desbloqueo ("romper el bloqueo")

$ svn unlock http://svn.example.com/repos/project/raisin.jpg 
svn: Unlock request failed: 403 Forbidden (http://svn.example.com) 
$ svn unlock --force http://svn.example.com/repos/project/raisin.jpg 
'raisin.jpg' unlocked. 

(que es lo que di D a través de la interfaz gráfica de usuario de TortoiseSVN)

+0

También hice lo que me dijo en el repositorio, pero si tuviera que hacerlo un archivo cada uno, me habría tomado años. Dado que mi conocimiento limitado con cli no me permitió encontrar un comando recursivo, es por eso que me tomó un poco más de tiempo. :) – vikmalhotra

+0

@ShiVik: cierto que no hay una opción recursiva, pero puedes encontrar la forma de guionarlo: http://old.nabble.com/recursive-find-locks-unlock-in-repository-td25010776.html 'svnadmin lslocks | grep -B2 Owner | grep Path | sed "s/Path: \ ///" | xargs svn desbloquear --force' por ejemplo. Pero la GUI de TortoiseSVN también es una buena solución. – VonC

29

Hacer una limpieza SVN liberará el bloqueo así:

$ svn cleanup 
+0

Esto funciona particularmente bien cuando Tortoise (o cualquier cliente) no tiene sentido. Traté de comprometerme, y Tortoise se estrelló. En intentos posteriores, Tortoise me dijo que algunos de los archivos estaban bloqueados. Comprobando el repositorio, ninguno de los archivos lo inventó, así que era algo local, pero ninguna de las respuestas anteriores funcionó para mi situación. Éste hizo (haciendo clic derecho en la carpeta en Explorer -> TortoiseSVN -> Limpiar ... Y lo ejecutó con la opción "Limpiar el estado de copia de trabajo". Después de eso todo funcionó muy bien. –

+0

Funciona muy bien cuando Xcode bloquea sus archivos porque no fue capaz de comprometerse completamente (por el motivo que sea) – Daniel

+0

No funcionó para mí. Estaba intentando eliminar una carpeta que tenía bloqueos de otra persona, e incluso después de haber revisado la carpeta problemática y ejecutar 'svn cleanup' en luego 'svn delete' en él, aún no pude confirmar porque los bloqueos todavía estaban en el servidor. – Apteryx

0

Para mí borrar el archivo de bloqueo en el interior Svn no trabajó desde que llegué mal msg suma de comprobación después de tratar de actualizar el archivo.

que tiene la siguiente msg después de ejecutar la limpieza SVN dentro del directorio:

SVN: En el directorio '' SVN: No se puede copiar '.svn/tmp/texto-base/file_name.svn-base' a 'filename.3.tmp': Ningún archivo o directorio

Así que copié mi archivo a .svn/tmp/text-base y cambié el nombre a file_name.svn-base. Entonces la limpieza y la actualización funcionó bien.

7

Si alguien más ha bloqueado los archivos de forma remota, descubrí que al usar TortoiseSVN 1.7.11 para hacer lo siguiente, pude desbloquearlos con éxito en mi copia de trabajo.(Similar a la respuesta de vikkun)

  • clic derecho copia de trabajo> Comprobar modificaciones
  • clic en el botón Comprobar repositorio
  • Seleccione los archivos que desea desbloquear
  • Haga clic derecho> Obtener Bloqueo
  • Comprobar "Steal la cerradura" casilla de verificación
  • Después de bloqueo es robado, seleccione de nuevo
  • Haga clic derecho> bloqueo de liberación

Los archivos en la copia de trabajo ahora deben estar desbloqueados.

2

El administrador del repositorio puede eliminar los bloqueos (recursivamente), operando en cientos de archivos dentro de un directorio problemático, pero solo mediante scripts ya que no hay una opción --recursive para svnadmin rmlocks.

$repopath=/var/svn/repos/myproject/; 
$problemdirectory=trunk/bikeshed/ 
IFS=$'\n'; for f in $(sudo svnadmin lslocks $repopath $problemdirectory \ 
| grep 'Path: ' \ 
| sed "s/Path: \///") ; \ 
do sudo svnadmin rmlocks $repopath "$f" ; done 

Esta solución funciona con nombres de archivos que tienen espacios en ellos.

0

Cuando traté de ejecutar el script desde arriba como se proporcionó originalmente, recibía un error cuando intentaba establecer las variables: ./scriptname: line1: =/svn/repo/path /: No existe dicho archivo o directorio ./scriptname: line2: = directory /: Ningún archivo o directorio

Quité el '$' de las dos primeras líneas y esto funcionó perfectamente después de eso.

repopath=/var/svn/repos/myproject/; 
problemdirectory=trunk/bikeshed/ 
IFS=$'\n'; for f in $(sudo svnadmin lslocks $repopath $problemdirectory \ 
| grep 'Path: ' \ 
| sed "s/Path: \///") ; \ 
do sudo svnadmin rmlocks $repopath "$f" ; done 
2

A menos que tenga acceso de administrador a la máquina SVN y puede utilizar la herramienta 'svnadmin', su mejor opción parece ser la siguiente:

  1. obtener el directorio problemática utilizando svn checkout --ignore-externals *your_repo*
  2. Uso svn status --show-updates en el repositorio revisado para averiguar qué archivos están potencialmente bloqueados (si alguien encuentra la documentación sobre el significado de los códigos de estado, comente).
  3. svn unlock --force *some_file* Uso de los archivos encontrados en 2.

He utilizado el siguiente de una sola línea para automatizar 2. y 3 .:

svn status -u | head -n -1 | awk '{ print $3 }' | xargs svn unlock --force 
2

Si tiene acceso a la herramienta svnadmin en el servidor de repositorio, puede utilizar esta alternativa para eliminar todos los bloqueos (según el script publicado por VonC)

svnadmin lslocks <path_to_repo> |grep -B2 Owner |grep Path |sed "s/Path: \///" | xargs svnadmin rmlocks <path_to_repo> 
Cuestiones relacionadas