Échec de svn commit: répertoire dépassé

j'ai un problème qui semble très simple, mais il est difficile à résoudre. J'obtiens l'erreur mentionnée après la suppression d'un répertoire. Je n'ai pas trouvé une solution encore à résoudre le conflit. C'est de cette façon qu'il se produit:

svn add dir
svn add dir/file1
svn commit
svn add dir/file2
svn commit
svn delete dir
svn commit
--> commit failed  
--> Directory '/dir' is out of date

LA solution évidente 'svn update' ne fonctionne pas. Après svn update, un prochain commit échoue avec:

Commit failed
Directory '/dir' remains in conflict.

En attendant j'ai trouvé une solution mais c'est un peu lourd:

svn resolve --accept working dir
svn commit --> still fails
svn update
svn commit --> still fails
svn resolve --accept working dir
svn commit --> NO PROBLEM!

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 bien plus complexe. Est-ce que quelqu'un peut me donner une solution simple Avec is 'faisable' dans le script perl?

44
demandé sur Moberg 2010-07-21 14:49:53

8 réponses

il suffit de faire un svn update et alors votre engagement devrait fonctionner.

66
répondu khmarbaise 2010-07-21 11:04:11

si je comprends bien subversion, le problème est le suivant:

Subversion suit la révision en cours pour chaque fichier et répertoire séparément. Chaque fois qu'une modification sur un fichier est engagée, la révision du répertoire parent change dans le repo, mais votre copie de travail a toujours le répertoire dans son ancienne révision.

ainsi, dans votre scénario, après avoir ajouté le fichier, le répertoire parent dans le fichier repo a une révision plus élevée que votre copie de travail. Lorsque vous essayez pour supprimer le répertoire que vous travaillez sur une version périmée.

À résoudre:

svn update après l'ajout du fichier, mais avant la suppression du dir.

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

58
répondu Stephen Friedrich 2018-01-17 12:03:38

Vous avez juste besoin de mettre à jour, puis valider

1
répondu ULysses 2010-07-21 10:51:57

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

1
répondu TheJuice 2010-07-21 10:53:43

la mise à jour, nettoyage, puis valider.

1
répondu Arda Ç. 2015-10-03 13:10:55

Pour contourner ce problème, j'ai utilisé " svn revert ', puis faire les commettre de nouveau, ce qui devrait se débarrasser du contenu de la faire "svn delete" et de s'engager de nouveau. J'ai eu ce problème en essayant de renommer un répertoire, mais j'espère que cela va fonctionner.

0
répondu Mark 2014-01-08 12:00:46

problème similaire que j'ai rencontré avec l'espace de travail frais:

$ 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
répondu Ruslan 2016-05-20 08:35:48

cela se produit lorsque vous allez propager un fichier et que le même fichier est mis à jour dans le SVN. Alors ça va entrer en conflit.Donc, ce que vous devez faire, c'est simplement prendre une copie de vos modifications et restaurer le fichier. puis encore coller votre code. Alors vous pouvez vous engager sans problème.

0
répondu chamzz.dot 2018-05-17 08:13:43