web-dev-qa-db-fra.com

Dossiers obstrués dans Subversion

Que signifie "obstrué" quand vous essayez de vous connecter à Subversion? Je vois deux dossiers en rouge avec le statut de texte "obstrué". Je ne vois pas ce que cela signifie nulle part dans la documentation.

Lorsque j'essaie la commande cleanup, le message "le nom du dossier n'est pas un répertoire de travail". C’est un dossier que je viens de créer dans VS, et quand j’essaie de l’ajouter à Subversion, cela me donne cette erreur. Tous les autres dossiers vont bien.

128
PositiveGuy

cela se produit lorsque vous avez supprimé ou déplacé les sous-répertoires .svn (sans passer par les commandes SVN). SVN a donc une vue corrompue de la copie de travail. 

Essayez d’abord un nettoyage et, si cela ne résout pas le problème, rétablissez (ou mettez à jour) le répertoire pour restaurer les dossiers du sous-répertoire .svn.

110
gbjbaanb

Sans savoir quoi cela en est la cause, la solution peut consister à exporter la copie de travail (la totalité de la commande que vous avez localement) vers un autre emplacement.

Si vous utilisez tortoisesvn, vous avez la possibilité "d'exporter des fichiers sans version", mais je pense que si vous le faites depuis la ligne de commande, cela n'exportera que les fichiers versionnés. .

Une fois cela fait, extrayez une copie de travail vierge, puis déposez la sauvegarde exportée que vous avez par dessus. Il est très important que la sauvegarde ne contienne aucun dossier .svn.

J'ai déjà vu ces erreurs lorsque des personnes ont extrait des copies de travail dans d'autres copies de travail ou quoi que ce soit d'autre qui corrompt les entrées .svn.

9
Neil Trodden

Avait le même problème et résolu comme ça:

  • renommé le dir obstrué
  • créé le répertoire avec son nom d'origine en SVN (par exemple, svn mkdir)
  • mis à jour le dossier parent afin que le répertoire nouvellement créé apparaisse dans ma copie de travail
  • copié les fichiers du fichier obstrué vers le répertoire nouvellement créé et les a validés
5
Tim Büthe

Si vous êtes sur un système * nix, assurez-vous de ne pas créer de fichier, ajoutez-le à SVN, puis supprimez-le en le remplaçant par un dossier du même nom. N'aide pas OP, mais j'espère que cela évitera à quelqu'un beaucoup de stress.

4
Jeremy Massel

Rien n'a fonctionné pour moi alors j'ai fait ce qui suit:

  • exporté avec les fichiers non versionnés dans un nouvel emplacement
  • renommé le dossier existant
  • déplacé le dossier de l'emplacement d'exportation dans le projet
  • renommé le nouveau dossier
  • ajouter, commettre
  • supprimé l'ancien dossier renommé
  • renommé le nouveau dossier
  • commettre 
1
Bobby Tables

Face à ce problème sur une machine Windows.

J'avais jeté un coup d'œil à l'annuaire avant d'avoir emprunté tout le projet auquel il appartenait. Cela a provoqué pour moi le problème «obstrué».

J'ai simplement supprimé ce dossier et lancé une mise à jour à partir de la racine (de ce dossier). Cela a bien fonctionné.

Des commandes comme le nettoyage, etc. ne fonctionnaient pas pour moi.

Un mot d'avertissement: 

  1. Ceci est coûteux si le dossier est volumineux.
  2. Cela vous fera perdre toutes vos modifications s'il y en a.

Bonne chance.

1
Obaid

Cela signifie que, pour une raison quelconque, un conflit est survenu pendant l'opération. Vérifiez s'il existe un fichier ou un dossier non versionné portant le même nom qu'un fichier versionné.

(Paraphrasé à partir du fichier d'aide du client Tortoise SVN)

1
Colin Nicholls

Je l’ai aussi vu sous Windows après avoir créé un lien symbolique vers un répertoire de référentiel; dans ce cas, la racine du référentiel est vue comme "obstruée". Cela ne semble pas avoir d'effet, cependant.

Étapes à suivre pour reproduire:

  1. Commander votre repo 

    svn checkout --force http://svn.server.hostname/path/to/repo/and/plugin_dir
    
  2. Vérifiez que votre répertoire est OK

    cd plugin_dir
    svn st -u
    

    La sortie devrait être

    Status against revision: 1234
    
  3. Créez le lien symbolique (qui montre le problème) 

    cd ..
    mklink /d link_dir plugin_dir
    cd link_dir
    svn st -u
    

    La sortie sera

    ~           1234  .
    Status against revision: 1234
    
1
Chris R. Donnelly

Il existe différentes variantes de scénario pouvant provoquer cette situation . En voici un exemple:

J'ai fini avec le! marquer sur un répertoire renommé de www à www_a sans utiliser la commande 'svn rename':

  1. Renommez le répertoire en cours qui porte le nom d'origine, par exemple www_b
  2. Renommer www_a retour à www
  3. Assurez-vous de faire 'svn update' ou 'svn revert' dans le répertoire www
  4. Supprimez le répertoire www mis à jour sans avec 'svn delete'
  5. Allez dans le répertoire parent et lancez 'svn update'
  6. Cela restaurera le répertoire www d'origine
  7. Cette fois, utilisez 'svn rename' pour renommer www en www_a
  8. Renommez www_b retour à www
  9. Utilisez 'svn add' pour l'ajouter au référentiel

Vous devriez obtenir un répertoire de travail svn correct à ce stade. Et apprenez une ou deux choses sur la façon de résoudre la confusion dans le répertoire svn.

1
Will

J'obtiens ce statut "obstrué" sur les répertoires lorsque je mets à jour un CMS (WordPress ou Drupal) via l'interface Web - l'application ne sait pas que son code est en réalité une copie de travail Subversion; répertoire (y compris le répertoire .svn) et vous place dans un nouveau répertoire à partir de la nouvelle version du plugin.

Pour récupérer ce répertoire .svn, à partir du répertoire contenant le répertoire obstrué. Je fais une caisse avec --force. Par exemple, si plugin_dir est marqué "~", à partir de son répertoire parent, je lance:

svn checkout --force http://svn.server.hostname/path/to/repo/and/plugin_dir

Tous les fichiers déjà présents sont laissés seuls et marqués "E" sur le résultat de la commande d'extraction (marqués par "M" lorsque j'exécute svn status). 

Je dois parfois revenir en arrière et ajouter des fichiers nouveaux avec la mise à jour; ou supprimer des fichiers qui devraient être supprimés dans le cadre de la mise à jour, car ils sont réapparus lorsque j'ai effectué le paiement. Je crois que ceux-ci sont marqués "A" à la caisse, mais un svn status ultérieur ne les mentionnera pas.

0
larcher

Cela peut également se produire lorsque vous mettez à niveau votre Subversion vers une version non prise en charge par XCode.

0
Drew H

J'ai rencontré ce problème dans Eclipse où certains fichiers étaient marqués d'un point d'exclamation rouge. Le problème était un dossier .svn errant dans le répertoire source. J'ai supprimé le dossier .svn, actualisé Eclipse et réussi à archiver les fichiers. 

0
bhlowe

J'ai rencontré ce problème lorsque j'ai collé un dossier avec des sous-répertoires dans ma copie de travail à l'aide de mon client FTP - je savais que je me suis trompé dès que j'ai cliqué sur le bouton de transfert ... les risques de travailler trop tard.

J'ai essayé toutes les suggestions ci-dessus et d'autres trouvées en ligne sans succès. Chaque option produisait l'erreur que mon répertoire était verrouillé et que l'opération ne pouvait pas être effectuée.

Je suis allé dans ma copie Time Machine, j'ai restauré le répertoire et j'étais prêt à partir. J'ai nettoyé la copie de travail par précaution, mis à jour correctement mes fichiers et je suis retourné dans les affaires.

0
John McLaughlin

Voici le moyen le plus simple (et le plus sûr) que j'ai trouvé pour résoudre ceci:

  1. Renommez temporairement le fichier ou le répertoire incriminé (ou un répertoire parent) obstrué (par exemple, ajoutez ".backup").
  2. Supprimez tous les répertoires .svn du répertoire renommé (le cas échéant).
  3. svn revert l'objet renommé (et maintenant manquant) de l'étape 1.
  4. svn delete l'objet retourné.
  5. Renommez la sauvegarde de l'étape 1 avec son nom d'origine.
  6. Ajoutez et enregistrez l'objet renommé dans svn en tant que nouvel objet.
0
devios1

Nous avons souvent plusieurs succursales en même temps en même temps, afin de me sauver de la commutation ou de la gâchis avec IIS - configuration, je vérifie chaque branche dans un dossier séparé. J'utilise ensuite la liaison de répertoire pour relier ces dossiers au chemin principal configuré dans IIS. 

Donc, pour moi, le répertoire lié a toujours une exclamation jaune et est marqué comme obstrué. Je pense que c’est parce qu’il a été techniquement créé/déplacé en dehors de SVN. 

0
anton

Cela m’est arrivé lorsque j’ai remplacé un fichier par un dossier portant exactement le même nom . Résolu en supprimant l’ancien fichier, commit, puis en ajoutant le nouveau . Un petit hacky, mais qui a fonctionné pour moi: )

0
Mihai Costiug