Comment puis-je libérer les verrous dans Subversion de manière récursive?

J’ai un problème avec le contrôle de version dans Subversion. J’ai extrait une copie de travail de respository et obtenu des verrous sur tous ses fichiers. Ensuite, sans libérer les verrous, j’ai supprimé le dossier du disque.

  • Je ne peux pas supprimer le dossier du référentiel, car il a un verrou
  • Si le je et essayer de libérer les serrures récursivement, il est dit qu’il n’y a pas de serrures à libérer.
  • Dans la vue Parcourir le référentiel, je ne peux casser les verrous que sur certains dossiers et non sur des dossiers de manière récursive.

Comment puis-je briser les verrous résidant dans le référentiel? J’utilise TortoiseSVN sous Windows. Existe-t-il une commande pour casser les verrous récursivement pour un dossier?

OK j’ai compris. Voici ce qui a fonctionné pour moi.

  • Consultez une copie de travail
  • Ensuite, allez dans le menu de l’explorateur Windows, TortoiseSVN -> Vérifier les modifications …
  • Cliquez sur le bouton Vérifier le référentiel
  • Sélectionnez Tous les fichiers, cliquez avec le bouton droit de la souris et sélectionnez l’option de locking
  • Supprimez la copie de travail et celle du référentiel. Voila! 🙂

Faire un nettoyage SVN libèrera également le verrou:

$ svn cleanup 

De la section de locking avancé

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

Cela signifie simplement que le fichier n’est pas verrouillé dans votre répertoire de travail actuel, mais s’il est toujours verrouillé au niveau du référentiel, vous pouvez forcer le délocking («casser le verrou»)

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

(qui est ce que vous avez fait avec l’interface graphique de TortoiseSVN)

Si quelqu’un d’autre a verrouillé les fichiers à distance, j’ai constaté que l’utilisation de TortoiseSVN 1.7.11 pour effectuer les opérations suivantes les avait déverrouillées avec succès dans ma copie de travail. (similaire à la réponse de vikkun)

  • Faites un clic droit sur la copie de travail> Recherchez les modifications
  • Cliquez sur le bouton Vérifier le référentiel
  • Sélectionnez les fichiers que vous souhaitez déverrouiller
  • Clic droit> Obtenir le locking
  • Cochez la case “Voler le verrou”
  • Une fois le verrou volé, sélectionnez à nouveau
  • Clic droit> Libérer le verrou

Les fichiers en copie de travail doivent maintenant être débloqués.

L’administrateur du référentiel peut supprimer les verrous (récursivement), en opérant sur des centaines de fichiers dans un répertoire problématique – mais uniquement par script car il n’y a pas d’option –recursive à 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 

Cette solution fonctionne avec des noms de fichiers comportant des espaces.

Si vous n’avez pas access à l’administrateur de la machine svn et pouvez utiliser l’outil ‘svnadmin’, votre meilleure option semble être la suivante:

  1. Extraire le répertoire problématique en utilisant svn checkout --ignore-externals *your_repo*
  2. Utilisez svn status --show-updates sur le référentiel extrait pour savoir quels fichiers sont potentiellement verrouillés (si quelqu’un trouve la documentation sur la signification des codes d’état, veuillez commenter).
  3. Utilisez svn unlock --force *some_file* sur les fichiers trouvés en 2.

J’ai utilisé le liner suivant pour automatiser 2. et 3:

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

Si vous avez access à l’outil svnadmin sur le serveur repo, vous pouvez utiliser cette alternative pour supprimer tous les verrous (en fonction du script envoyé par VonC).

 svnadmin lslocks  |grep -B2 Owner |grep Path |sed "s/Path: \///" | xargs svnadmin rmlocks  

Pour moi, la suppression du fichier de locking à l’intérieur de .svn n’a pas fonctionné car j’ai reçu une mauvaise sum de contrôle après avoir essayé de mettre à jour le fichier.

J’ai reçu le message suivant après avoir exécuté svn cleanup dans le répertoire:

svn: Dans le répertoire ” svn: Impossible de copier ‘.svn / tmp / text-base / nom_fichier.svn-base’ en ‘filename.3.tmp’: aucun fichier ou répertoire de ce type

J’ai donc copié mon fichier vers .svn / tmp / text-base et changé le nom en file_name.svn-base. Ensuite, le nettoyage et la mise à jour ont bien fonctionné.

Lorsque j’ai essayé d’exécuter le script ci-dessus tel que prévu initialement, une erreur s’est produite lors de la tentative de définition des variables: ./scriptname: line1: = / svn / repo / path /: aucun fichier ou répertoire de ce type ./scriptname: line2: = répertoire /: pas de tel fichier ou répertoire

J’ai retiré le “$” des deux premières lignes et cela a fonctionné parfaitement après cela.

 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