2010-01-07 16 views
23

J'ai récemment rencontré un comportement très étrange de subversion.Impossible de résoudre le conflit d'arborescence avec SVN

Je viens de fusionner ma copie locale d'une branche avec une branche distante. Tout s'est bien passé, mais j'ai 1 conflit d'arbre (suppression locale, mise à jour à distance). Ok, pensai-je, modifiâmes la copie de travail de manière appropriée et lançâmes "svn resolve --accept = working -R.". Subversion a indiqué qu'il avait résolu mes problèmes et que "svn st" ne présentait plus aucun problème. Donc, j'ai essayé de m'engager, mais svn m'a dit que l'un des dossiers internes (à l'intérieur de mon dossier en conflit) était obsolète et suggéré de le faire, MAIS cela a rendu le dossier encore en conflit! Que dois-je faire pour sortir de ce cercle visu?

+0

pourrait vouloir examiner les réponses et accepter une autre réponse – FlipMcF

Répondre

8

Cela peut ne pas aider, mais parfois un "svn cleanup" corrige des problèmes de métadonnées bizarres. Si vous extrayez une copie de travail propre, la copie propre a-t-elle le même problème? Si oui, la réponse précédente ressemble à un pas dans la bonne direction.

+0

Ah, merci, j'ai oublié le nettoyage ... Besoin d'essayer celui-ci – Anton

5

Vous pouvez utiliser un autre moyen que la commande svn resolve:

  1. Créer un patch du fichier conflictuel. (Ou une sauvegarde de votre version du dossier conflictuel avec svn export ...)
  2. Mettez à jour votre référentiel (mise à jour svn)
  3. Appliquer le patch fait précédemment (ou remplacer le fichier conflictuel/dossier avec la sauvegarde)
  4. Validez la modification (svn commit)
+0

qui est en fait ce que j'ai finir avec – Anton

+1

:(Lorsque svn ne fonctionne pas normalement, cela signifie que le dossier .svn est fauché.Svn commande de nettoyage peut aider mais cela ne fonctionne jamais pour moi donc j'utilise cette méthode à chaque fois ... (triste) .N'oubliez pas de marquer ce poste comme "réponse acceptée" si ça marche (ou sinon cette question restera toujours aussi sans réponse) – Phong

0

Vous n'aviez probablement pas vos dossiers mis à jour lorsque vous avez effectué la fusion, ou il y avait un conflit quelque part avant la fusion. Pour corriger, vous devez rétablir votre tronc (dossier cible) à la révision précédente. Ensuite, exécutez le nettoyage sur ce dossier. Ensuite, exécutez le nettoyage sur le dossier de la branche (dossier source). Ensuite, mettez à jour les deux dossiers à nouveau. Si vous obtenez des lignes en rouge dans un flux de travail, vous devez d'abord restaurer ces fichiers, puis les placer dans l'état souhaité. Ensuite, mettez à jour les dossiers (oui, encore une fois). Terminez enfin la fusion à nouveau.

41
~/sandbox/jabira > svn resolve --accept=theirs-full testClient/ 
svn: warning: Tree conflicts can only be resolved to 'working' state; 'testClient' not resolved 

~/sandbox/jabira > svn resolve --accept=working testClient/ 
Resolved conflicted state of 'testClient' 

Hope this aide

+1

Merci, ça m'a aidé! Je suppose qu'il est facile de mal interpréter le message d'avertissement de svn, que svn est foiré. En fait c'est une instruction quoi faire dans ce cas. –

0

C'est ce qui m'a travaillé pour Abandonner tous les changements locaux et aller avec les fichiers du référentiel du serveur:

svn update --accept theirs-full 

svn resolve --accept theirs-full <pathname> 

Ce message apparaît: W155027: conflit Arbre ne peut être résolu que pour 'travailler'

La prochaine étape n'est pas intuitive, mais cela coupe réellement le crochet. 22:

svn resolve --accept=working <pathname> 

Maintenant, annulez tous les changements de "travail" récursivement. Cela a annulé tous mes changements locaux.

svn revert -R . 

Retour à la normale, sans erreur:

svn update