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.
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.
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)
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:
svn checkout --ignore-externals *your_repo*
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). 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