web-dev-qa-db-fra.com

SVN commit a échoué: répertoire obsolète

J'ai un problème qui semble très simple mais qui est difficile à résoudre. J'obtiens l'erreur mentionnée après la suppression d'un répertoire. Je n'ai pas encore trouvé de solution pour résoudre le conflit. Voici comment cela se passe:

 svn add dir 
 svn add dir/fichier1 
 svn commit 
 svn add dir/fichier2 
 svn commit 
 svn delete dir 
 svn commit 
--> commit failed 
--> Le répertoire '/ dir' est obsolète 

La solution évidente 'svn update' ne fonctionne pas. Après svn update, une prochaine validation échoue avec:

 La validation a échoué. Le répertoire '/ dir' reste en conflit .

En attendant, j'ai trouvé une solution mais elle est un peu lourde:

 svn resolve - accepte le répertoire de travail 
 svn commit -> échoue toujours 
 svn met à jour 
 svn commit -> échoue toujours 
 svn resol - accepte le répertoire de travail 
 svn commit -> AUCUN PROBLÈME! 

Deux questions: - quelqu'un peut-il expliquer ce comportement parce que je suis très curieux à ce sujet - ce problème se produit dans un script Perl dans une situation beaucoup plus complexe. Quelqu'un peut-il me donner une solution simple avec «faisable» dans le script Perl?

51
Jos Geerts

Créez juste un svn update et votre commit devrait alors fonctionner.

72
khmarbaise

Si je comprends bien Subversion, le problème est le suivant:

Subversion suit séparément la révision en cours pour chaque fichier et le répertoire . Chaque fois qu’une modification d’un fichier est validée, la révision du répertoire parent change dans le référentiel, mais votre copie de travail conserve le répertoire révision.

Ainsi, dans votre scénario, après l'ajout du fichier, le répertoire parent du référentiel a une révision supérieure à celle de votre copie de travail . Lorsque vous essayez de supprimer le répertoire, vous travaillez sur une version obsolète.

Résoudre: 

Faites un svn update après avoir ajouté le fichier, mais avant de supprimer le répertoire.

En général, si vous ne souhaitez pas importer les modifications de quelqu'un d'autre, vous pouvez limiter la mise à jour au répertoire lui-même: svn up --depth empty dir.

58
Stephen Friedrich

Effectuez la mise à jour, le nettoyage, puis validez.

3
Arda Ç.

Vous avez juste besoin de mettre à jour et ensuite commettre

1
ULysses

Avez-vous essayé svn up dir avant de faire le commit final?

1
TheJuice

Cela se produit lorsque vous allez valider un fichier et que le même fichier est également mis à jour dans le SVN. Il y aura alors conflit. Vous devez donc simplement copier les modifications et restaurer le fichier. puis encore coller votre code. Ensuite, vous pouvez vous engager sans aucun problème.

0
chamzz.dot

Problème similaire que j'ai rencontré avec un nouvel espace de travail:

$ svn delete dir/file
D         dir/file
$ svn ci -m "comment1"
Deleting       dir/file
$ svn delete dir/
D         dir
$ svn ci -m "comment2"
Deleting       dir
svn: Commit failed (details follow):
svn: Item 'dir' is out of date

Pour résoudre le problème, j'ai mis à jour les sources et utilisé la commande 'delete URL':

$ svn delete --force https://server/path.../dir
$ svn update
0
Ruslan

Pour contourner ce problème, j'ai utilisé 'svn revert', puis refait le commit, ce qui devrait permettre de supprimer le contenu du 'svn delete' puis de le commettre. J'ai eu ce problème en essayant de renommer un répertoire mais j'espère que cela fonctionnera.

0
Mark