Comment résoudre le message «modification locale, suppression entrante lors de la mise à jour»


293

Quand je fais un svn status ., je reçois ceci:

!     C auto-complete-config.elc
      >   local edit, incoming delete upon update
!  +  C auto-complete.elc
      >   local edit, incoming delete upon update
!  +  C popup.elc
      >   local edit, incoming delete upon update
!  +  C fuzzy.elc
      >   local edit, incoming delete upon update

fondamentalement, ces fichiers ne devraient pas être dans le référentiel. Un développeur les a supprimés. Ensuite, je pense que j'ai fait un svn rm ...après coup par erreur (j'aurais dû le faire à la svn update .place).

Alors maintenant, quand je le fais svn status ., je reçois ces messages de conflit d'arbre.

J'ai trouvé le doc ici mais je ne sais pas comment le «fusionner» selon le doc.

Comment se débarrasser d'eux?

Je pense que ma copie de travail est synchronisée avec le référentiel. Je ne sais pas pourquoi ces messages s'affichent. Ces fichiers doivent être supprimés et sont supprimés pour autant que je sache partout. J'ai essayé svn update .et svn revert .je reçois toujours ce message quand je le fais svn status ..


1
la réponse de lesmana fonctionne également pour le message"local missing or deleted or moved away, incoming dir edit upon merge"
Warlike Chimpanzee

Réponses:


434

Version courte:

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update
$ touch foo bar
$ svn revert foo bar
$ rm foo bar

Si le conflit concerne des répertoires au lieu de fichiers, remplacez-les touchpar mkdiret rmpar rm -r.


Remarque: la même procédure fonctionne également pour la situation suivante:

$ svn st
!     C foo
      >   local delete, incoming delete upon update
!     C bar
      >   local delete, incoming delete upon update

Version longue:

Cela se produit lorsque vous modifiez un fichier alors que quelqu'un d'autre l'a supprimé et validé en premier. En tant que bon citoyen svn, vous effectuez une mise à jour avant un commit. Vous avez maintenant un conflit. En réalisant que la suppression du fichier est la bonne chose à faire, vous supprimez le fichier de votre copie de travail. Au lieu d'être contenu, svn se plaint maintenant que les fichiers locaux sont manquants et qu'il y a une mise à jour conflictuelle qui veut finalement voir les fichiers supprimés. Bon travail svn.

Ne devrait svn resolvepas fonctionner, pour une raison quelconque, vous pouvez effectuer les opérations suivantes:

Situation initiale: les fichiers locaux sont manquants, la mise à jour est en conflit.

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

Recréez les fichiers en conflit:

$ touch foo bar

Si le conflit concerne les répertoires, remplacez-le touchpar mkdir.

Nouvelle situation: fichiers locaux à ajouter au référentiel (ouais, svn, quoi que vous disiez), mise à jour toujours conflictuelle.

$ svn st
A  +  C foo
      >   local edit, incoming delete upon update
A  +  C bar
      >   local edit, incoming delete upon update

Rétablir les fichiers dans l'état que svn les aime (cela signifie qu'ils ont été supprimés):

$ svn revert foo bar

Nouvelle situation: les fichiers locaux ne sont pas connus de svn, la mise à jour n'est plus en conflit.

$ svn st
?       foo
?       bar

Maintenant, nous pouvons supprimer les fichiers:

$ rm foo bar

Si le conflit concerne les répertoires, remplacez-le rmpar rm -r.

svn ne se plaint plus:

$ svn st

Terminé.


8
Cela fonctionne également lorsque le conflit concerne un répertoire. Au lieu de toucher foo bar, faites mkdir foo et mkdir bar . Tout le reste est identique.
Vipin Johney

vous pouvez utiliser svn st | grep ! | cut -f 7 -d' ' | xargs touchcomme une doublure pour toucher tous les fichiers manquants
Tibor Blenessy

N'oubliez pas que les répertoires le font aussi rm -r foo bar(ou rmdir foo barsous Windows ou si vous aimez Windows).
trysis

Cette réponse a sauvé ma raison. Je vous remercie.
Sam

159

Essayez de résoudre le conflit en utilisant

svn resolve --accept=working PATH

Merci. cela semble être la bonne solution. (Je ne connaissais pas l'option "résoudre" auparavant. Je l'ai marquée comme réponse. Bien que, pour une raison quelconque, cela n'ait pas fonctionné pour moi, probablement parce que mon arbre de copie de travail a été corrompu ou autre chose ... à la fin, je l'ai résolu en supprimant simplement le répertoire et en faisant une mise à jour
Xah Lee

1
Cela ne fonctionnait pas pour moi au départ, j'ai donc vérifié une autre copie de la branche svn dans un dossier temporaire. Ensuite, j'ai supprimé le PATH provoquant un conflit et j'ai validé les modifications. Après cela, je suis retourné à ma copie d'origine et j'ai exécuté cette commande. Cela a fonctionné avec le message "État conflictuel résolu de PATH" Cela fonctionne, merci :)
Durin

Je crois comprendre que cela n'aurait pas d'importance si l'original a été supprimé ou non dans le référentiel, car "résoudre" ne fonctionne que sur la copie de travail.
govi

solution parfaite pour moi
Sergio Álvarez

20

Je viens de recevoir ce même problème et j'ai trouvé que

$ svn revert foo bar

résolu le problème.

la résolution de svn n'a pas fonctionné pour moi:

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

$ svn resolve --accept working
svn: Try 'svn help' for more info
svn: Not enough arguments provided

$ svn resolve --accept working .

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

$ svn resolve --accept working foo
Resolved conflicted state of 'foo'

$ svn st
!  +    foo
!  +  C bar
      >   local edit, incoming delete upon update

2

Si vous n'avez apporté aucune modification dans le répertoire en conflit, vous pouvez également rm -rf conflicts_in_here/et ensuite svn up. Cela a fonctionné pour moi au moins.


1

Vous pouvez forcer à rétablir votre répertoire local en svn.

 svn revert -R your_local_path

Merci, m'a également aidé à résoudre A + C path/to/diret> local dir edit, incoming dir delete or move upon update
RAM237

0

Ainsi, vous pouvez simplement restaurer le fichier que vous avez supprimé, mais n'oubliez pas: si vous travaillez sur n'importe quel type de projet avec un fichier de projet défini (comme iOS), la restauration du fichier l'ajoutera à votre structure de dossiers système mais pas à la structure de votre fichier de projet. des étapes supplémentaires peuvent être nécessaires si vous êtes dans ce cas


0

Ce problème se produit souvent lorsque nous essayons de fusionner les modifications d'une autre branche à partir d'un mauvais répertoire.

Ex:

Branch2\Branch1_SubDir$ svn merge -rStart:End Branch1
         ^^^^^^^^^^^^
   Merging at wrong location

Un conflit qui se jette sur son exécution est:

Tree conflict on 'Branch1_SubDir'
   > local missing or deleted or moved away, incoming dir edit upon merge

Et lorsque vous sélectionnez q pour quitter la résolution , vous obtenez le statut suivant:

 M      .
!     C Branch1_SubDir
      >   local missing or deleted or moved away, incoming dir edit upon merge
!     C Branch1_AnotherSubDir
      >   local missing or deleted or moved away, incoming dir edit upon merge

ce qui signifie clairement que la fusion contient des modifications liées à Branch1_SubDiret Branch1_AnotherSubDir, et ces dossiers ne peuvent pas être trouvés à l'intérieur Branch1_SubDir(évidemment, un répertoire ne peut pas être à l'intérieur de lui-même).

Comment éviter ce problème en premier lieu:

Branch2$ svn merge -rStart:End Branch1
 ^^^^
Merging at root location

La solution la plus simple pour ce problème qui a fonctionné pour moi:

svn revert -R .
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.