web-dev-qa-db-fra.com

Est-il possible de toujours (forcer) écraser les modifications locales lors de la mise à jour depuis SVN? Ignorer les conflits?

Je sais que je devrais travailler sur une branche à moi, mais quelques-uns d'entre nous sont sur la même branche d'un projet. L'un des développeurs a fait un commit et je voulais juste mettre à jour ma copie locale avec la dernière version de SVN. En exécutant la "mise à jour svn", j'obtiens cette sortie:

Restored 'index.html'
U    somescript.php
Conflict discovered in file.xml'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: 

Existe-t-il une option/un moyen d'écraser mes modifications locales et d'obtenir les derniers fichiers de Subversion et d'ignorer tous les conflits?

J'ai regardé certains des autres messages sur Stack et ils ne répondent pas tous à la question. Ils disent de supprimer le projet et de passer à la caisse, ce qui, je suppose, est le meilleur moyen ... Mais je veux plus de détails sur les raisons pour lesquelles je ne peux pas forcer une mise à jour. Merci

MODIFIER:

J'ai donc sélectionné s 'afficher toutes les options':

(s) afficher toutes les options: s

  (e)  edit             - change merged file in an editor
  (df) diff-full        - show all changes made to merged file
  (r)  resolved         - accept merged version of file

  (dc) display-conflict - show all conflicts (ignoring merged version)
  (mc) mine-conflict    - accept my version for all conflicts (same)
  (tc) theirs-conflict  - accept their version for all conflicts (same)

  (mf) mine-full        - accept my version of entire file (even non-conflicts)
  (tf) theirs-full      - accept their version of entire file (same)

  (p)  postpone         - mark the conflict to be resolved later
  (l)  launch           - launch external tool to resolve conflict
  (s)  show all         - show this list

Je suppose que je devrais choisir l'option 'tc'?

60
Phill Pafford

Si vous voulez vraiment une copie de HEAD (la dernière révision dans repos), alors vous devriez

svn revert -R <path> // discard all your changes inside path (recursive)
svn update           // get latest revision of all files (recursive)

C'est ça.

Attention, vous perdrez TOUS vos changements depuis votre dernier "commit".

EDIT: a ajouté le -R <path> de réponse Isu_guy pour être complet et aider les lecteurs à trouver une seule réponse complète

74
tato

la réponse de tato est absolument correcte et veuillez tenir compte de sa prudence. Vous perdrez TOUS vos changements. Juste une clarification sur la syntaxe et quelques nuances

svn revert n'est pas récursif par défaut et a besoin d'un chemin sur lequel travailler. Faire est récursif ajouter "-R". Si vous êtes dans le répertoire courant, utilisez "./" pour le "chemin" ci-dessous ou utilisez un chemin absolu comme "/ path_to_your_folder"

svn revert -R <path>

la mise à jour svn est récursive. Si vous êtes dans le répertoire, vous n'avez absolument pas besoin d'un chemin

svn update
28
lsu_guy

Je ferais ceci:

svn up --accept tf

ou

svn up --accept theirs-full

Cela dit, "svn revert -R" puis "svn up" à la racine de votre copie de travail feraient également l'affaire. Dans mon cas, j'ai plusieurs WC pour divers projets, donc j'exécute un script Shell qui les met à jour quand je démarre mon ordinateur. Je n'utilise pas accept, j'utilise plutôt "--accept p" pour reporter la résolution car c'est un processus automatisé, puis je fusionne tous les conflits que SVN ne peut pas fusionner automatiquement de lui-même (généralement, cela implique de revenir en arrière, mais cela dépend ).

27
Carnix

Utilisation de svn 1.6.11 (fourni par CentOS 6.4) La commande de Carnix devrait ressembler à

svn up --accept theirs-full

(je ne peux pas ajouter de commentaire car je n'ai pas assez de réputation)

16
Andrei Nistor

Répondre à votre première question. Non. Mais vous pouvez remplacer vos fichiers locaux en exécutant les commandes suivantes à partir de la racine de votre projet:

svn revert -R .
svn update

Cela a fonctionné sur mon mac avec svn 1.7.19 et ubuntu avec svn 1.8.8

2
Alexandre Santos