63 votes

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

Je sais que je devrais travailler sur ma propre branche, mais nous sommes deux à travailler 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 du SVN. En lançant 'svn update', j'obtiens ce résultat :

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/manière d'écraser mes changements locaux et d'obtenir le(s) dernier(s) fichier(s) de subversion et d'ignorer tous les conflits ?

J'ai regardé certains des autres messages sur Stack et ils ne répondent pas à la question. Ils disent de supprimer le projet et de le relancer, ce qui, je suppose, est la meilleure solution... Mais je voudrais plus de détails sur la raison pour laquelle je ne peux pas forcer une mise à jour. Merci

EDITAR:

J'ai donc sélectionné "Afficher toutes les options" :

(s) montrer 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" ?

0 votes

Pourquoi voulez-vous faire cela ? Faites une fusion et vous ne perdrez pas vos modifications. Sinon, faites une svn revert y luego svn up .

0 votes

Le fait est que je n'ai pas besoin de mes modifications et que je voulais obtenir la dernière version de ce fichier et écraser mes modifications.

0 votes

Pourquoi ne pas supprimer le fichier et obtenir la version récente juste en mettant à jour :)

84voto

tato Points 1328

Si vous voulez vraiment une copie de HEAD (la dernière révision dans les dépôts), vous devez alors

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

C'est tout.

Attention, vous perdrez TOUTES les modifications apportées depuis votre dernier "commit".

EDITAR: a ajouté le -R <path> de Réponse de Isu_guy dans un souci d'exhaustivité et pour aider les lecteurs à trouver une seule réponse complète

1 votes

Les fichiers non versionnés ne sont pas supprimés. Voir aussi ici : Y a-t-il une commande Subversion pour réinitialiser la copie de travail ?

29voto

Carnix Points 125

Je ferais ça :

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 ferait également l'affaire. Dans mon cas, j'ai plusieurs WC pour différents projets, donc j'exécute un shell script qui les met tous à jour lorsque je démarre mon ordinateur. Je n'utilise pas accept, plutôt j'utilise "--accept p" pour reporter la résolution puisque 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 un retour en arrière, mais cela dépend).

0 votes

Étrange - peut être un client SVN ou une version spécifique. J'exécute la version actuelle de TortoiseSVN sur Win7, cependant cette commande fonctionne également sur le serveur SVN que nous avons sur nos serveurs CentOS aussi.

28voto

lsu_guy Points 313

La réponse de Tato est tout à fait correcte et je vous prie de tenir compte de sa mise en garde. Vous perdrez TOUTES vos modifications. Juste une clarification sur la syntaxe et quelques nuances

svn revert est non-récursif par défaut et a besoin d'un chemin pour travailler. Pour le rendre récursif, ajoutez "-R". Si vous êtes dans le répertoire courant, utilisez "./" pour le "chemin" ci-dessous ou utilisez un chemin absolu comme "/chemin_vers_votre_dossier".

svn revert -R <path>

svn update est récursif. Si vous êtes dans le répertoire, vous n'avez pas besoin de chemin d'accès.

svn update

17voto

Andrei Nistor Points 121

En utilisant svn 1.6.11 (tel que livré par CentOS 6.4), la commande de Carnix devrait ressembler à ceci

svn up --accept theirs-full

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

2voto

Alexandre Santos Points 3292

Pour répondre à votre première question. No . Mais vous pouvez remplacer vos fichiers locaux en exécutant les commandes suivantes depuis la racine de votre projet :

svn revert -R .
svn update

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X