Que dois-je faire lorsque le «nettoyage svn» échoue?


245

J'ai beaucoup de changements dans un dossier de travail, et quelque chose a foiré en essayant de faire une mise à jour.

Maintenant, lorsque j'émets un «nettoyage svn», j'obtiens:

>svn cleanup .
svn: In directory '.'
svn: Error processing command 'modify-wcprop' in '.'
svn: 'MemPoolTests.cpp' is not under version control

MemPoolTests.cpp est un nouveau fichier ajouté par un autre développeur et a été supprimé dans la mise à jour. Il n'existait pas auparavant dans mon dossier de travail.

Puis-je faire quelque chose pour essayer d'avancer sans avoir à extraire une nouvelle copie du référentiel?

Clarification: Merci pour les suggestions concernant le déplacement du répertoire et la réduction d'une nouvelle copie. Je sais que c'est une option, mais c'est celle que j'aimerais éviter car il y a beaucoup de changements imbriqués en profondeur dans plusieurs répertoires (cela aurait dû être une branche ...)

J'espère une façon plus agressive de faire le nettoyage, peut-être de forcer le fichier SVN à revenir dans un état connu (et j'ai essayé d'en supprimer la copie de travail ... cela n'a pas aidé).


Re: Utilisation d'une nouvelle copie. Prenez une copie d'au-delà pour comparer les versions les unes contre les autres
Jon Winstanley

2
La solution d'Amin n'a-t-elle pas fonctionné pour vous? Sûrement une réponse évidente pour accepter le contraire?
Alice Purcell

2
Assurez-vous qu'aucun des fichiers n'est ouvert par une application, c'est facile à oublier. L'Explorateur de processus et une recherche rapide sur le chemin sont très utiles pour découvrir ceci: technet.microsoft.com/en-us/sysinternals/bb896653.aspx
angularsen

4
À mon humble avis, l'existence de la commande "svn cleanup" est un aveu d'échec.
yoyo

Réponses:


223

Quand tout recommencer n'est pas une option ...

J'ai supprimé le fichier journal dans le .svnrépertoire (j'ai également supprimé le fichier incriminé .svn/props-base), fait un nettoyage et repris ma mise à jour.


3
J'obtenais un problème similaire à la question d'origine ici (en raison d'une commande svn interrompue). Cela m'a corrigé. Même si je devais aussi aller dans le répertoire parent et y faire de même.
Nigel Hawkins

2
+1 Je ne peux pas vous dire combien de fois j'ai été dans cette situation. Lorsqu'il s'agit d'un sous-sous-dossier, aucun problème, supprimez tout le dossier, nettoyez et mettez à jour. Mais quand il s'agit d'un fichier au niveau racine, ce n'est pas une option bon marché (plusieurs heures pour extraire à nouveau l'ensemble du projet). Astuce fantastique - merci beaucoup.
Ewan Makepeace

9
Pour moi, la suppression des fichiers de verrouillage l'a fait. Peut-être d'intérêt pour quelqu'un. Vous pouvez les supprimer récursivement avec la commande suivante: rm -rffind . -type f -name lock
H6.

1
La commande de happy-coding ne fonctionne pas. Cela fait:sudo rm -rf | find . -type f -name lock
Zachary Schuessler

2
Je n'ai pas pu trouver que .svn/prop-basej'ai.svn/[pristine|tmp|entries|format|wc.db]
bigpony

112

Les choses ont changé avec SVN 1.7, et la solution populaire de suppression du fichier journal dans le répertoire .svn n'est pas possible avec le passage à une implémentation de copie de travail de base de données.

Voici ce que j'ai fait qui semblait fonctionner:

  1. Supprimez le répertoire .svn de votre copie de travail.
  2. Démarrez une nouvelle extraction dans un nouveau répertoire temporaire.
  3. Annulez le paiement (nous ne voulons pas attendre que tout se déroule).
  4. Exécutez un nettoyage sur ce paiement annulé.
  5. Nous avons maintenant un nouveau répertoire .svn avec une base de données propre (mais pas / peu de fichiers)
  6. Copiez ce fichier .svn dans votre ancien répertoire de travail corrompu.
  7. Exécutez la mise à jour svn et cela devrait mettre à jour votre nouveau répertoire partiel .svn avec votre ancien répertoire de travail.

C'est un peu déroutant, du point de vue du processus. Essentiellement, ce que nous faisons est de supprimer le .svn corrompu, puis de créer un nouveau .svn pour le même chemin de paiement. Nous déplaçons ensuite ce nouveau .svn vers notre ancien répertoire de travail et le mettons à jour dans le référentiel.

Je viens de le faire dans TSVN et cela semble fonctionner correctement et ne nécessite pas de paiement complet et de téléchargement.

-Jody


8
Je semble faire cela au moins deux fois par mois. Une telle douleur. L'équipe svn devrait ajouter ces étapes svn cleanup --force. Et bien sûr, toutes les opérations d'ajout, de suppression et (avec 1.8) de changement de nom sont perdues.
Martin

2
@Adgezaza Oui. Oui.
mjs

1
cela le corrige pour moi. C'est un peu différent: après avoir changé svn, la mise à jour échoue pour 1 dossier spécifique. Supprimez ce dossier et tout va bien
Hoàng Long

@Pup, ça devrait. Essentiellement, vous tirez simplement les métadonnées pour une nouvelle extraction, puis vous les remplissez de fichiers. SVN déterminera si les fichiers correspondent aux métadonnées ou non. Mais, vous savez, zippez tout en premier au cas où ...
JKoplo

1
J'ai réinstallé le SVN (Tortoise SVN 1.8), récupéré chaque dossier svn de mon projet, puis effectué les opérations mentionnées ici et le tour est joué! Merci à l'auteur!
Dmitry

110

Jeter un coup d'œil à

http://www.anujvarma.com/svn-cleanup-failedprevious-operation-has-not-finished-run-cleanup-if-it-was-interrupted/

Résumé du correctif du lien ci-dessus (Merci à Anuj Varma)

  1. Installez le shell de ligne de commande sqlite (sqlite-tools-win32) depuis http://www.sqlite.org/download.html

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

Le SELECT devrait vous montrer votre dossier / fichier incriminé dans le cadre de la file d'attente de travail. Ce que vous devez faire est de supprimer cet élément de la file d'attente de travail.

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

C'est tout. Maintenant, vous pouvez exécuter à nouveau le nettoyage - et cela devrait fonctionner. Ou vous pouvez passer directement à la tâche que vous faisiez avant d'être invité à exécuter le nettoyage (ajout d'un nouveau fichier, etc.)


Notez que les réponses de lien uniquement sont déconseillées, les réponses SO devraient être le point final d'une recherche de solution (par rapport à une autre étape de références, qui ont tendance à devenir obsolète au fil du temps). Veuillez envisager d'ajouter un synopsis autonome ici, en conservant le lien comme référence.
kleopatra

8
Firefox a une extension de gestionnaire sqlite qui peut ouvrir et modifier le fichier .svn / wc.db. Fournit une interface graphique pratique pour effectuer des opérations équivalentes sur work_queue.
Magicianeer

Si vous avez une version récente de SVN et Firefox, l'addon sqlite manager s'occupe de ce problème en 30 secondes. Ne vous inquiétez pas de supprimer des répertoires ou d'utiliser le Repobrowser. En 2016, je pense que cela devrait être la réponse acceptée
arbitre

5
Pour moi, exécuter 'supprimer de WC_LOCK;' est également requis.
Tristan.Liu

Fonctionne parfaitement! Svn craint! Mais après la suppression de work_queue svn, donnez-moi une autre erreur "svn verrouillé", exécutez simplement avec la tortue (eclipse n'a pas l'option) nettoyez avec "break locks" vérifié
amdev

42

Si tout le reste échoue:

  1. Vérifiez dans un nouveau dossier.
  2. Copiez vos fichiers modifiés.
  3. Revenez.
  4. Compressez l'ancien dossier quelque part (vous ne savez jamais + la paranoïa est bonne) avant de le supprimer et d'utiliser le nouveau.

27

La dernière version (j'utilise la version 1.9.5) résout ce problème en ajoutant une option "Break locks" dans le menu de nettoyage. Assurez-vous simplement que cette case est cochée lors du nettoyage.

nettoyer la fenêtre


Cela semble tellement évident maintenant! Merci
Billy Jake O'Connor

A fonctionné comme un charme!
Viswanath

Fonctionne bien pour moi.
Sergey

Travaillé! Quand j'ai vu cette solution, j'ai tout de suite su quel était le problème ... (je pense): j'avais un excel encore ouvert, ce qui le modifie. Je voulais valider mes modifications dans certains fichiers java et j'ai vu le fichier Excel et je me suis dit "je n'ai rien changé là-bas ... revenir". Ce qui n'a pas fonctionné, j'ai réalisé qu'il était toujours ouvert, l'a fermé, F5, n'apparaissait pas dans commit anmore, alors passez à commit. Et puis il me dit "pls run cleanup" et à partir de là, j'étais coincé. Donc merci! :)
BAERUS

16

Cette réponse ne s'applique qu'aux versions antérieures à 1.7 (merci @ ŁukaszBachman) .

Subversion stocke ses informations par dossier (en .svn), donc si vous traitez simplement avec un sous-dossier, vous n'avez pas besoin de récupérer tout le référentiel - juste le dossier qui a bouché:

cd dir_above_borked
mv borked_dir borked_dir.bak
svn update borked_dir

Cela vous donnera une bonne copie de travail du dossier borked, mais vos modifications seront toujours sauvegardées dans borked_dir.bak. Le même principe s'applique avec Windows / TortoiseSVN.

Si vous avez des modifications dans un dossier isolé, consultez le

svn checkout -N borked_dir   # Non-recursive, but deprecated

ou

svn checkout --depth=files borked_dir
# 'depth' is new territory to me, but do 'svn help checkout'

économisé énormément de temps en utilisant votre suggestion "si vous avez juste affaire à un sous-dossier, vous n'avez pas besoin de vérifier l'ensemble du référentiel"
iBabur

Cela a fonctionné pour moi - tout ce que j'ai fait était svn uple même dépôt qui était au milieu d'un svn uponglet différent - j'ai oublié que j'avais fait cela et je l'ai laissé incomplet la veille.
Jon z

Ce n'est plus vrai - avec la dernière version, SVN utilise désormais un seul .svnrépertoire.
ŁukaszBachman

9
$ ls -la .svn
$ rm -f .svn/lock

ensuite

$ svn update

J'espère que ça aide


6

J'ai eu exactement le même problème. Je ne pouvais pas m'engager et le nettoyage échouerait.

À l'aide d'un client de ligne de commande, j'ai pu voir un message d'erreur indiquant qu'il ne parvenait pas à déplacer un fichier de .svn/propsvers .svn/prop-base.

J'ai regardé le fichier spécifique et j'ai constaté qu'il était marqué en lecture seule. Après avoir supprimé l'attribut en lecture seule, j'ai pu nettoyer le dossier et valider mes modifications.


J'ai abandonné cet arbre et j'en ai finalement obtenu un nouveau. Mais merci pour l'indication sur quelque chose à vérifier la prochaine fois.
Rob Walker

ha ... j'ai même renommé les dossiers dans la zone .svn \ pristine de {name} à {name} _old, puis de nouveau à l'original {name} et cela a fonctionné
beauXjames

5

Il est possible que vous ayez un problème avec deux noms de fichiers qui ne diffèrent que par des majuscules. Si vous avez rencontré ce problème, la création d'un autre répertoire de copie de travail ne résout pas le problème.

Les systèmes de fichiers Windows actuels (c'est-à-dire merdiques) ne font tout simplement pas la différence entre Filenameet FILEname. Vous avez deux correctifs possibles:

  1. Vérifiez sur la plate-forme avec un véritable système de fichiers (basé sur Unix), renommez le fichier et validez les modifications.
  2. Lorsque vous êtes stocké sous Windows, vous pouvez renommer des fichiers dans le navigateur du référentiel Eclipse SVN qui reconnaît la différence et y renommer le fichier.
  3. Vous pouvez également renommer les fichiers problématiques à distance à partir de n'importe quel client SVN en ligne de commande à l'aide de svn rename -m "broken filename case" http://server/repo/FILEname http://server/repo/filename

Cela s'est avéré être mon problème; un collègue avait en quelque sorte réussi à archiver plusieurs fichiers de projet Xcode, chacun avec deux copies ne différant que par la casse. J'ai utilisé TortoiseSVN pour parcourir le dépôt et supprimer les fichiers supplémentaires. Ensuite, j'ai supprimé mes dossiers locaux contenant les fichiers en double et la mise à jour svn a finalement réussi.
kgriffs

Pas simplement un problème Windows. Cela affecte également les Mac. Par défaut, les systèmes de fichiers Mac HFS + ne respectent pas la casse, mais préservent la casse des noms de fichiers. J'ai installé une deuxième partition sur mon disque dur qui fait des noms de fichiers sensibles à la casse afin de contourner ces problèmes.
David W.

4

Exécutez la svn cleanupcommande dans un terminal (si elle échoue depuis Eclipse ce qui était mon cas):

~/path/to/svn-folder/$ svn cleanup

J'ai essayé différentes solutions expliquées ici, mais aucune n'a fonctionné .

Équipe d' action → Échec de la mise à jour de la tête :

svn: E155004: Il y a des éléments de travail inachevés dans '/ home / user / path / to / svn-folder'; exécutez d'abord 'svn cleanup'.

Équipe d' action → Le nettoyage échoue avec la même erreur.

Solution qui a fonctionné pour moi: exécutez la commande svn cleanup dans un terminal .

La commande a réussi.

Ensuite, TeamUpdate dans Eclipse a de nouveau fonctionné.

Remarque: ma version SVN est 1.9.3.

Vérifiez également la réponse de Chris si svn cleanupcela ne fonctionne pas.


3

J'ai essayé de le faire svn cleanupvia la console et j'ai une erreur comme:

svn: E720002: Can't open file '..\.svn\pristine\40\40d53d69871f4ff622a3fbb939b6a79932dc7cd4.svn-base':
The system cannot find the file specified.

J'ai donc créé ce fichier manuellement (vide) et l'ai fait à svn cleanupnouveau. Cette fois, tout s'est bien passé.


3

J'ai eu le même problème. Pour moi, la cause était un conflit avec EasySVN et (TortoiseSVN ou simplement SVN). J'ai eu une mise à jour automatique et un commit avec EasySVN (qui ne fonctionnait pas).

Lorsque j'ai désactivé cela, je n'ai pas pu nettoyer, valider ou mettre à jour. Aucune des solutions ci-dessus n'a fonctionné, mais le redémarrage a fonctionné :)


Yaaaaay jimi, tu es mon héros (dedans).
TRoa

2

Je viens d'avoir ce même problème sur Windows 7 64 bits. J'ai exécuté la console en tant qu'administrateur et supprimé le répertoire .svn du répertoire du problème (j'ai obtenu une erreur sur les journaux ou quelque chose, mais je l'ai ignoré). Ensuite, dans l'explorateur, j'ai supprimé le répertoire des problèmes qui ne s'affichait plus comme sous contrôle de version. Ensuite, j'ai exécuté une mise à jour et les choses se sont déroulées comme prévu.


2

Si le problème est la sensibilité à la casse (ce qui peut être un problème lors de la vérification sur un Mac, ainsi que sur Windows) et que vous n'avez pas la possibilité de procéder à la vérification sur un système * nix, ce qui suit devrait fonctionner. Voici le processus depuis le début:

% svn co http://[domain]/svn/mortgages mortgages

(La caisse s'ensuit… puis…)

svn: In directory 'mortgages/trunk/images/rates'
svn: Can't open file 'mortgages/trunk/images/rates/.svn/tmp/text-base/Header_3_nobookmark.gif.svn-base': No such file or directory

Ici, SVN essaie d'extraire deux fichiers avec des noms similaires qui ne diffèrent que par la casse - Header_3_noBookmark.gifet Header_3_nobookmark.gif. Par défaut, les systèmes de fichiers Mac ne respectent pas la casse de manière à ce que SVN s'étouffe dans des situations comme celle-ci. Alors...

% cd mortgages/trunk/images/rates/
% svn up
svn: Working copy '.' locked
svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)

Cependant, la course svn cleanupne fonctionne pas, comme nous le savons.

% svn cleanup
svn: In directory '.'
svn: Error processing command 'modify-wcprop' in '.'
svn: 'spacer.gif' is not under version control

spacer.gifn'est pas le problème ici ... Il ne peut tout simplement pas passer l'erreur précédente au fichier suivant. J'ai donc supprimé tous les fichiers du répertoire autre que .svn, et supprimé le journal SVN. Cela a rendu le nettoyage efficace, afin que je puisse extraire et renommer le fichier incriminé.

% rm *; rm -rf .svn/log; svn cleanup
% svn up Header_3_nobookmark.gif
A    Header_3_nobookmark.gif
Updated to revision 1087.
% svn mv Header_3_nobookmark.gif foo
A         foo
D         Header_3_nobookmark.gif
% svn up
A    spacer.gif
A    Header_3_noBookmark.gif

Après cela, j'ai pu retourner dans le répertoire racine du projet et exécuter svn uppour vérifier le reste.


2

Chaque fois que j'ai des problèmes similaires, j'utilise rsync (NB: j'utilise Linux ou Mac OS X) pour aider comme ceci:

# Go to the parent directory
cd dir_above_borked

# Rename corrupted directory
mv borked_dir borked_dir.bak

# Checkout a fresh copy
svn checkout svn://... borked_dir

# Copy the modified files to the fresh checkout
# - test rsync
#   (possibly use -c to verify all content and show only actually changed files)
rsync -nav --exclude=.svn borked_dir.bak/ borked_dir/

# - If all ok, run rsync for real
#   (possibly using -c again, possibly not using -v)
rsync -av --exclude=.svn borked_dir.bak/ borked_dir/

De cette façon, vous avez un nouveau contrôle, mais avec les mêmes fichiers de travail. Pour moi, cela fonctionne toujours comme un charme.


2

J'ai rencontré ça trop récemment. L'astuce pour moi était après avoir sélectionné "Nettoyer", dans la boîte de dialogue des options contextuelles, cocher "Briser les verrous", puis "OK". Il a nettoyé avec succès pour moi.


1
SVN n'a pas de boîte de dialogue contextuelle en soi; vous utilisez peut-être Tortoise. L'OP utilise le client de ligne de commande, donc votre conseil n'est pas très utile.
Robert

1

Subclipse est confus par le comportement de verrouillage vraiment diabolique de Windows. Unlocker est votre ami. Cela peut trouver des fichiers verrouillés et libérer de force les verrous.


1

(Avant d'essayer de déplacer des dossiers et d'effectuer une nouvelle extraction.)

Supprimez le dossier dans lequel se trouvent les fichiers incriminés - oui, même le .svndossier, puis effectuez une svn cleanupsur le dossier tout en haut / parent.


1

J'ai fait face au même problème. Après quelques recherches sur Internet, j'ai trouvé l' article ci - dessous . Puis j'ai réalisé que j'étais connecté en tant qu'utilisateur différent de l'utilisateur que j'avais utilisé pour configurer SVN sous, un problème d'autorisation essentiellement.


1

Lorsque je fais face à ce problème avec TortoiseSVN (Windows), je vais sur Cygwin et j'exécute le « nettoyage svn » à partir de là; il nettoie correctement pour moi, après quoi tout fonctionne à partir de TortoiseSVN.


Cela fonctionne également avec une fenêtre cmd. Je ne sais pas pourquoi ça marche quand Tortoise échoue, mais ça marche parfois.
Watusimoto

0

Les réponses ici ne m'ont pas aidé, mais avant de reprendre le projet, j'ai fermé et ouvert Eclipse (Subversive est mon client SVN) et le problème a disparu.


0

Cela peut ne pas s'appliquer dans toutes les situations, mais lorsque j'ai récemment rencontré ce problème, mon "correctif" consistait à mettre à niveau le package Subversion sur mon système. J'avais utilisé 1.4.quelque chose, et quand j'ai mis à niveau vers la dernière (1.6.6 dans mon cas), la caisse a fonctionné.

(J'ai essayé de le télécharger à nouveau, mais un paiement dans un répertoire propre était toujours suspendu au même endroit.)


0

Le verrouillage en lecture seule se produit parfois sur les lecteurs réseau avec Windows. Essayez de le déconnecter et de le reconnecter à nouveau. Ensuite, nettoyez et mettez à jour.


0

Après avoir parcouru la plupart des solutions citées ici, j'ai toujours eu l'erreur.

Le problème était OS X insensible à la casse . L'extraction d'un répertoire contenant deux fichiers portant le même nom, mais des majuscules différentes provoque un problème. Par exemple, ApproximationTest.java et Approximationtest.java ne doivent pas se trouver dans le même répertoire. Dès que nous nous débarrassons de l'un des fichiers, le problème disparaît.


0

J'ai rencontré un problème où suite à une mise à jour, SVN a montré qu'un dossier était en conflit. Étrangement, cela n'était visible que par la ligne de commande - TortoiseSVN pensait que tout allait bien.

#>svn st
!       my_dir
!       my_dir\sub_dir

svn cleanup, svn revert, svn updateEt svn resolveont tous échoué à fixer cela.

J'ai finalement résolu le problème comme suit:

  • Recherchez dans le répertoire .svn "sub_dir"
  • Utilisez RC -> Propriétés pour décocher le drapeau «lecture seule» sur le fichier d'entrées
  • Ouvrez le fichier d'entrées et supprimez la ligne "inachevé ..." et la somme de contrôle correspondante
  • Enregistrez et réactivez l'indicateur de lecture seule
  • Répétez l'opération pour le répertoire my_dir

Après cela, tout allait bien.

Notez que je n'ai eu aucun changement local, donc je ne sais pas si vous seriez à risque si vous le faisiez. Je n'ai pas utilisé la méthode de suppression / mise à jour suggérée par d'autres - je suis entré dans cet état en essayant cela dans le répertoire my_dir / sub_dir / sub_sub_dir (qui a commencé avec les mêmes symptômes) - donc je ne voulais pas risquer d'aggraver les choses encore!

Pas tout à fait sur le sujet, mais peut-être utile si quelqu'un tombe sur ce post comme moi.


0

Non non Non! Si vous utilisez SVN 1.7 ou supérieur, la commande de nettoyage devrait faire l'affaire!

J'ai également fait quelques expériences et découvert que la solution (au moins dans Eclipse ) exécutait le nettoyage uniquement pour le dossier spécifié dans le message d'erreur et non pour l'ensemble du projet!


Cela a fonctionné pour moi aujourd'hui, je vais donc +1. D'un autre côté, une autre fois où je suis entré dans une boucle était exactement le contraire - je faisais un clic droit sur un dossier et je choisissais "nettoyage" quand j'avais besoin de faire un clic droit sur un espace vide à la place. Cela dépend donc beaucoup de la situation spécifique.
Daphne B

downvote parce que la réponse à "comment puis-je réparer les choses lorsque le nettoyage svn échoue" n'est pas "cela devrait fonctionner"
mjs

0

Je l'ai fait sudo chmod 777 -R .pour pouvoir modifier les autorisations. Sans pour autantsudo , cela ne fonctionnerait pas, me donnant la même erreur que l'exécution d'autres commandes.

Maintenant, vous pouvez faire svn updatequoi que ce soit, sans avoir à supprimer tout votre répertoire et à le recréer. Cela est particulièrement utile, car votre IDE ou votre éditeur de texte peut déjà avoir certains onglets ouverts ou avoir des problèmes de synchronisation. Vous n'avez pas besoin de supprimer et de remplacer votre répertoire de travail avec cette méthode.


0

J'ai résolu ce problème en copiant le répertoire .svn d'un collègue dans le mien, puis en mettant à jour ma copie de travail. C'était une solution agréable, rapide et propre.


0

Il y a de très bonnes suggestions dans la réponse précédente, mais si vous rencontrez un problème avec TortoiseSVN sous Windows (un bon produit, mais ...), retournez toujours à la ligne de commande et faites d'abord un simple "nettoyage svn".

Dans de nombreuses circonstances, le client Windows n'exécutera pas la commande de nettoyage, mais le nettoyage fonctionne correctement à l'aide de l'utilitaire de ligne de commande SVN.


0

Tout en étant confronté à un problème similaire, la fusion manuelle dans la vue de synchronisation du référentiel a aidé à résoudre le problème.

Un nom de fichier était en conflit avec un autre et il mentionnait clairement le problème. Renommer le fichier plus récent sous un nom différent l'a résolu.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.