Subversion bloquée en raison de «l'opération précédente n'est pas terminée»?

229

Si j'essaie de mettre à jour mon dépôt subversion, il indique que je dois exécuter le nettoyage. Si j'exécute le nettoyage, il indique qu'un fichier est manquant. (J'ai supprimé un répertoire MASSIVE de fichiers qui n'ont pas pu être validés ce matin de mon ordinateur personnel, mais j'ai ensuite validé le même ensemble de fichiers à partir du travail, et maintenant mon dépôt à la maison est en panne). Donc, le nettoyage dit:

Le nettoyage n'a pas pu traiter blablabla Impossible de définir le fichier blablabla en lecture-écriture: le système ne peut pas trouver le fichier spécifié.

Si je mets à jour, il dit:

Commande: erreur de mise à jour: l'opération précédente n'est pas terminée; exécutez le «nettoyage» s'il a été interrompu Erreur: veuillez exécuter la commande «Nettoyage». Terminé!:

Comment obtenir ce décollage?

coderama
la source
(autre que la suppression de toutes les informations SVN et la relecture)
coderama
3
cette erreur ennuyeuse est la raison pour laquelle je déteste svn. Chaque fois que je suis confronté à cela, je dois reprendre ma commande car le nettoyage à partir du dossier racine ou du dossier parent ne fonctionne pas. Mais le plus gros problème est qu'il n'affiche pas d'icônes de superposition à ce moment-là, donc je ne sais pas quel fichier a été modifié pour la sauvegarde avant de vérifier
phuclv
Le message de @ sigurd-v est la vraie réponse à la question qui m'a aidé et à beaucoup d'autres: stackoverflow.com/a/22717607/5613292
Mehdi Javan

Réponses:

102

J'ai été dans des situations similaires. Avez-vous essayé d'exécuter le nettoyage à partir de la racine de votre espace de travail? Je sais que parfois un nettoyage à partir d'un répertoire enfant (où se situe le problème) ne fonctionne pas, et le nettoyage à la racine de l'espace de travail le fait.

Si cela échoue toujours, puisque vous avez supprimé un répertoire enfant quelque part. Essayez également de supprimer 1 niveau supérieur du répertoire enfant (en supposant qu'il ne s'agit pas de la racine) et réessayez la mise à jour et le nettoyage.

Si les tentatives de nettoyage ne réussissent à aucun niveau, alors la réponse est malheureusement extraire une nouvelle copie de travail.

Joshua McKinnon
la source
4
pour nettoyer du dir d'enfant! Ça marche pour moi!
Franva
1
Si vous lisez ceci, vous avez des ennuis :) Je n'ai jamais rencontré un tel gâchis avec Git (jusqu'à présent). J'ai fini par nettoyer / rétablir / nettoyer etc. sur n'importe quel répertoire que je pouvais, si Svn me le permettait.
aliopi
2
Le message de @ sigurd-v est la vraie réponse à la question qui m'a aidé et à beaucoup d'autres: stackoverflow.com/a/22717607/5613292
Mehdi Javan
J'ai exécuté le nettoyage de Windows FileExplorer (avec Turtoise) et cela m'a donné une erreur plus élaborée qui m'a dit quel était le fichier avec le problème, SVN a en quelque sorte perdu ce fichier, un fichier darm * .cache, donc j'ai pris un autre .cache et renommez-le pour remplacer le fichier manquant, exécutez le nettoyage, aucune erreur cette fois-ci, TOUS FIXE !!
Jhollman
331

Il n'est souvent pas nécessaire de procéder à une nouvelle extraction ou à une nouvelle copie.

Je viens de résoudre un problème similaire lié à l'erreur "l'opération précédente n'est pas terminée" avec l'aide de ceci ( Lien )

Il semble que svn se bloque parfois lors du traitement des commandes / opérations. Toutes ces opérations sont stockées dans le fichier de base de données wc.db dans le dossier .svn.

En téléchargeant SQLite dans mon répertoire de paiement et en exécutant

sqlite3.exe .svn/wc.db "select * from work_queue"

vous pouvez obtenir une liste de toutes les opérations en attente. Ces opérations sont celles que l'erreur appelle "non terminées".

En exécutant

sqlite3.exe .svn/wc.db "delete from work_queue"

toutes les anciennes opérations sont supprimées de la file d'attente de travail et l'erreur disparaît. Pas besoin d'une nouvelle caisse ou quoi que ce soit

Sigurd V
la source
5
Vous devez toujours essayer d'exécuter le nettoyage avant d'essayer la solution ci-dessus. Cela fonctionne si vous souhaitez obtenir un référentiel SVN bloqué en place sans avoir à extraire une nouvelle copie de travail.
Sigurd V
7
Le téléchargement de sqlite.exe et l'exécution de la suppression étaient en fait plus rapides que l'extraction et la fusion - excellente réponse
Jeffrey Knight
12
J'ai également obtenu un "verrouillé" après cela, mais je l'ai dépassé avec un "nettoyage svn"
Jeffrey Knight
1
J'ai exécuté ceci sur Debian, installez en utilisant apt-get install sqlite3, puis vous pouvez exécuter les commandes ci-dessus sans le .exe
Richard Merchant
3
J'ai également reçu le message «verrouillé», mais j'ai ensuite exécuté la commande «Nettoyer» en cochant la case qui dit «casse les verrous», et cela a fonctionné
McCoy
114

La console en cours d'exécution svn cleanupa résolu le même problème pour moi.

user2902464
la source
20
La commande console svn cleanupfournira également des informations plus détaillées que l'utilisation du plug-in Tortoise Explorer, ce qui la rend très utile dans des situations comme celle-ci.
Brandon S
7
L'exécution de la commande console fournira probablement suffisamment d'informations pour réellement résoudre le problème. C'est une bien meilleure réponse.
DDS
1
eh bien j'ai sélectionné le dossier le plus haut et utilisé svn cleanup, merci
deadfish
J'ai souvent réussi à parcourir les répertoires parents et à les nettoyer, mais c'est un peu long et «magique». Je ne savais pas que cela retournerait une erreur détaillée, +1.
Phil Cooper
Quand tu cours svn cleanup , assurez-vous que la console est élevée. Je ne l'ai pas fait au départ et j'ai eu l' red-write: Access is deniederreur.
Tony
26

Je viens d'avoir un problème similaire. L'exécution de Process Explorer a montré qu'un autre programme (Notepad ++) avait un descripteur de fichier dans un dossier que SVN avait essayé de supprimer. Lorsque j'ai fermé Notepad ++, "Clean Up" a pu s'exécuter correctement.

Glen Little
la source
Cela pourrait produire le problème mentionné dans la question. Mais j'ai peur, il ne peut pas le liquider si c'est déjà arrivé.
Gangnus
19

J'étais confronté à ce problème après avoir ajouté un pot qui est déjà dans le SVN et j'en ai ajouté la nouvelle version avec le même nom.

Dans Eclipse, j'ai essayé cela

  1. Cliquez avec le bouton droit sur le dossier> Équipe> Actualiser / nettoyer.
  2. Nettoyez, générez et actualisez mon application.
  3. Redémarrez Eclipse.

En utilisant les étapes ci-dessus, je suis en mesure de synchroniser.

Rakesh Chouhan
la source
1
A travaillé pour moi. Juste, la troisième étape n'est pas obligatoire (redémarrez Eclipse).
jpmottin
Cela a fonctionné pour moi aussi, j'ai essayé tellement de choses mais ça n'a pas marché. J'ai fermé mon studio visuel et j'ai nettoyé. merci beaucoup
AhammadaliPK
18

J'avais essayé les réponses les plus votées ici et quelques autres en vain. Ma WORK_QUEUEtable était vide et je n'ai pas pu essayer de nettoyer un dossier plus élevé. Ce qui a fonctionné était le suivant (c'est via Tortoise SVN);

  • Clic droit sur le dossier
  • Allez dans TortoiseSVN -> Nettoyer ...
  • Assurez-vous que l'option Break Locksest cochée et cliquez sur OK

L'opération de nettoyage se termine maintenant avec succès et je peux continuer. Aucun téléchargement de sqlite3 ou d'autres solutions compliquées n'est requis.

DiskJunky
la source
2
Briser les serrures ne fait pas ce que je pensais. Il brise uniquement les verrous locaux qu'il utilise sur votre système. Pas de verrous que quelqu'un d'autre a définis.
Brian Carlton
1
sqlite3 a parfois résolu mon problème, mais cette méthode était trop difficile à retenir et le nettoyage échouait si souvent. Cette méthode m'a sauvé ..
sc
9

Essayer d'exécuter le nettoyage alors que vos fichiers sont ouverts m'a posé des problèmes. dès que j'ai fermé ma candidature (Visual studio) j'ai fait le ménage et ça a réussi

John
la source
1
Vrai. Assurez-vous que vos fichiers ne sont pas utilisés ou récupérés en tant qu'utilisateur différent tel que Administrateur sous Windows.
froggythefrog
6

J'utilise la tortue SVN. Lorsque le nettoyage a échoué, cochez l'option de nettoyage

Assurez-vous que l'option Briser les verrous est cochée.

Étape de nettoyage

  • bouton gauche de la souris dans le dossier d'exploration
  • sélectionnez le menu 'Tortoise SVN' -> 'Clean up ...'
  • cochez ' Break Locks ' coché et appuyez sur 'ok'

Il a déjà répondu, mais parfois l'image aide

entrez la description de l'image ici

sc
la source
4

J'ai eu le même problème, dans mon cas, j'utilisais tortue svn avec l'application que je veux dire. En utilisant le shell cmd de Windows en mode root, j'ai appliqué le nettoyage svn puis la mise à jour svn .... Ensuite, vous pouvez revenir au mode application et cela fonctionnera parfaitement!

GutiMac
la source
2

J'ai essayé de supprimer le dossier .svn vers un autre emplacement et je l'ai replacé dans le même dossier racine. Après avoir essayé de mettre à jour le SVN, il a été mis à jour. Je ne sais pas exactement comment cela a fonctionné.

Ajayvignesh
la source
2

J'ai eu le même problème et j'ai découvert que j'avais un fichier .svn caché au niveau c: \. Une fois que j'ai supprimé ce dossier caché (.svn), tout a bien fonctionné. Je dois avoir involontairement créé un répertoire de travail sur le lecteur racine.

mike gold
la source
2

Dans mon cas, j'avais gulp-watch en cours d'exécution qui a causé les problèmes. Après l'avoir arrêté, j'ai pu exécuter la commande de nettoyage.

Mariusz Pawelski
la source
Cela m'a aidé à tuer une machine virtuelle Java indésirable et à progresser.
Plat du
2

salut les gars dans mes cas après avoir fermé Visual Studio et réessayez de nettoyer ça marche bien

Ali Sadri
la source
2

Je suis également resté avec le même problème que j'ai essayé de souffler:

1.Essayez de tuer le processus lié à svn, à savoir TSVNCache.exe et TortoiseProc 2.Réversion des fichiers non versionnés et suppression de ceux-ci, que j'ai dans svn. 3. nettoyage à l'aide de l'invite de commande "nettoyage svn"

et enfin lorsque le bureau a redémarré, cela a fonctionné pour moi, donc pour le redémarrage du système a fonctionné pour moi

Ankur Nirmalkar
la source
1

supprimez le svn du dossier principal et remplacez-le à partir d'une autre copie viable que vous avez de elsewere.and puis mettez à jour. Le dossier svn sera normalement un dossier caché. Assurez-vous donc d'afficher le dossier avant d'effectuer les étapes ci-dessus.

digish ad
la source
1

Solution de contournement qui a fonctionné pour moi:

  1. Coupez le contenu de votre répertoire et copiez-le dans un autre dossier.
  2. Exécutez le nettoyage à partir de la ligne de commande sur le dossier vide.
  3. Copiez les fichiers dans le dossier d'origine.

C'est fait, mais je ne peux pas expliquer pourquoi cela se produit. Si vous ne supprimez pas les fichiers, la commande de nettoyage indique qu'il ne peut pas lire / écrire ces fichiers.

Paolo
la source
1

J'ai eu le même problème, ce qui a fonctionné pour moi:

  1. Copiez vos dossiers et fichiers vers un autre endroit, par exemple dans un dossier (j'ai changé mes fichiers récemment et l'engagement a échoué et a conduit au problème résolu)
  2. consultez une nouvelle copie de travail
  3. copiez vos fichiers modifiés du dossier vers votre copie de travail et remplacez les fichiers existants. La validation / mise à jour devrait fonctionner maintenant
client
la source
1

J'ai eu une erreur telle que "Impossible de modifier les autorisations du fichier '/Users/Code/UnitTest.cpp': aucun fichier ou répertoire de ce type". La subversion est confuse à propos d'un fichier qui n'est plus là. J'ai simplement fait quelque chose comme "echo ABCD >> /Users/Code/UnitTest.cpp" pour créer une copie du fichier, puis nettoyer. Ça a marché.

Bonjour le monde
la source
1

Dans mon cas, l'erreur est apparue lors de la tentative de validation à partir d'un IDE. Lorsque j'ai exécuté la validation des mêmes répertoires avec TortoiseSVN dans l'explorateur, l'opération a réussi.

Dani
la source
1

Cela m'est arrivé lors de l'utilisation d'externes et l'un d'eux était corrompu. J'ai dû aller dans ce dossier et effectuer un nettoyage. Ensuite, le nettoyage a fonctionné pour la copie de travail entière.

Exemple: en utilisant externe ^/widgets/foo common/foo-widget, commencez par nettoyer le dossier common/foo-widget.

erikH
la source
1

J'ai résolu cette erreur aujourd'hui quand elle s'est produite en essayant de valider SVN. L'erreur était authentique, TortoiseSVN n'a pas pu accéder à un fichier que j'ai essayé de valider. Ce fichier avait été enregistré lors de l'exécution d'un programme "en tant qu'administrateur" sous Windows. Cela signifie que le fichier dispose d'un accès administrateur mais pas d'accès à partir de mon compte (TortoiseSVN fonctionnant en tant qu'utilisateur interactif). J'ai pris possession du fichier nommé sous mon compte Windows et après cela, le nettoyage a pu continuer.

Kim Anthony Groves
la source
0

J'ai d'abord rencontré ce problème en essayant de me connecter avec TortoiseSVN. Initialement, les deux, le nettoyage de TortoiseSVN et le nettoyage de la console svn ont tous deux échoué avec des messages similaires à ceux de l'affiche originale.

Mais ma solution (découverte accidentellement) était d'attendre quelques minutes. Je pense que TSVNCache conservait certains de ces fichiers au moment de l'enregistrement.

Jahmic
la source
0

suivez les étapes ci-dessous.

1) Allez dans le répertoire où vous ne pouvez pas nettoyer avec succès via svn . (Dossier racine ou dossier enfant).

2) Sélectionnez .svn dossier dans le répertoire, coupez ce dossier et collez-le dans le lecteur ou l'emplacement séparé (hors du répertoire svn)

3) Maintenant, retournez dans le répertoire - faites un clic droit et sélectionnez TortoiseSVN -->Repo-browser

4) Checkout le dossier (il n'effectuera pas de nouvelle vérification).

5) Tous vos articles seront à nouveau versionnés, et cela réparera le problème interne de svn, et le problème devrait être résolu.

Kunal Khatri
la source
il effectue UNIQUEMENT la vérification complète. de l'aide ?
candidJ
0

Dans mon cas, une instance d'arrière-plan de la machine virtuelle Java était en cours d'exécution, tuant le nettoyage qui a réussi.

Plat
la source
0

J'avais pris le dossier .svn de mon collègue développeur et remplacé mon dossier .svn par celui-ci. Ça a marché pour moi. Je ne sais pas quelles peuvent être les autres conséquences!

Manish Dubey
la source
0

En utilisant ce lien, https://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-cleanup.html

J'ai remarqué que le tutoriel avait coché les 6 meilleures options. En désespoir de cause, je l'ai essayé en utilisant ces cases à cocher, et à ma grande surprise, cela a fonctionné. Assurez-vous de lire attentivement ce que chacun fait. En regardant la description de chacun, ils semblaient sûrs à inclure pour moi, donc l'un de ces éléments vérifiés semblait avoir résolu le problème qui me tenait.

eaglei22
la source
0

Cela peut se produire lorsque des fichiers sont encore ouverts lorsque vous essayez de basculer / nettoyer SVN.

J'avais une succursale où j'avais créé un nouveau fichier, que j'avais ouvert dans une autre application. Le passage à une autre branche n'a pas pu supprimer le fichier, ce qui a entraîné l'échec du commutateur. Cela a également causé lasvn cleanup échec de la, mais cela ne s'affiche pas comme la raison dans l'interface utilisateur de Tortoise SVN.

L'exécution à svn cleanuppartir d'une fenêtre de console (sur le dossier racine) montre clairement l'erreurfile\location\file.ext: The process cannot access the file because it is being used by another process

La fermeture de toutes les poignées / fenêtres de fichiers ouverts et l'exécution de la console svn cleanuppermettent alors au nettoyage de fonctionner correctement.

Longue histoire - exécutez svn cleanupdans la console pour voir une erreur plus détaillée.

Jamie Pollard
la source
0

Suite à la réponse de Sigurd V (vous devriez essayer en premier), certaines bases de code plus grandes ont plusieurs dossiers '.svn', et ce n'est pas nécessairement celui du répertoire racine qui a la tâche verrouillée.

Si tel est le cas, vous devez vérifier chacun d'eux. Si vous avez déjà SQLite et Powershell, vous pouvez localiser rapidement le répertoire incriminé.

Pour rechercher les dossiers verrouillés, exécutez (remplacez path\to\sqlite.exe):

Get-ChildItem -Path . -Filter '.svn' -Recurse -Hidden | foreach { $toFind = $_.FullName + "\wc.db" ; gci $toFind | foreach { echo $_.FullName ; path\to\sqlite.exe $_.FullName "select * from work_queue" } }.

Cela donne une liste des répertoires .svn et, en dessous de chacun, une liste des tâches en cours.

S'il y en a avec des tâches inachevées, pour chaque exécution (remplacement path\to\sqlite.exeet path\to\.svn\wc.db):

path\to\sqlite.exe path\to\.svn\wc.db "delete from work_queue"

Robert Gowland
la source
0

J'ai vu plusieurs problèmes svn, dont celui-ci, résolus en supprimant / créant un .svn/tmprépertoire. Ensuite, exécutezsvn cleanup

Vinnie James
la source