167 votes

Meilleure façon de revenir à une précédente révision SVN d’un fichier ?

Par accident, j'ai commis trop de fichiers à un dépôt SVN et changé quelques choses que je ne voulais pas. (Soupir.) Afin de revenir à leur état précédent, le mieux que je pouvais venir avec a été

svn rm l3toks.dtx
svn copy -r 854 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx

Jeez! Il n'y a pas de meilleure façon? Pourquoi ne puis-je pas tout simplement écrire quelque chose comme ceci:

svn revert -r 854 l3toks.dtx

Ok, je suis le seul à l'aide de v1.4.4, mais j'ai écrémé en plus de la liste des modifications pour les 1,5 branche et je ne pouvais pas voir quoi que ce soit directement lié à ce. Ai-je raté quelque chose?


Edit: je suppose que je n'étais pas assez claire. Je ne pense pas que je veux inverser la fusion, parce que là je vais perdre les modifications que je ne veux à faire! Dire qu' fileA et fileB étaient à la fois modifié, mais je ne voulais commettre fileA; par hasard en tapant

svn commit -m "small change"

engage les deux fichiers, et maintenant, je veux revenir fileB. Inverser la fusion rend cette tâche plus facile (pour autant que je puisse dire) que les étapes que j'ai décrites ci-dessus.

243voto

orip Points 28225
 svn merge -r 854:853 l3toks.dtx
 

ou

 svn merge -c -854 l3toks.dtx
 

35voto

luapyad Points 2680

Consultez la section «annulation des modifications» du livre de svn

32voto

sdaau Points 6262

désolé pour l'utilisation de l'espace sur une réitération de la déjà donné la réponse mais c'est quelque chose que j'ai toujours de la difficulté avec.

Disons que j'ai mis à jour les fichiers locaux vers la dernière version, qui est de 854. Ensuite, je voudrais obtenir une ancienne révision de la version d'un fichier de quelques révision antérieure, disons révision 851.

Exemplaire de travail:

svn copy -r 851 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx

.. cependant, je ne peux pas être dérangé grepping pour les pensions de l'URL :)

Mise à jour apparemment peut fonctionner:

svn up -r 851 ./l3toks.dtx

... cependant, il marque aussi la copie locale "fraîchement extrait", ou plutôt "même en ligne de révision" (c'est à dire dans Tortoise/RabbitVCS vous obtenez une coche verte OK) ce qui signifie que vous ne pouvez pas faire svn ci -m "rolled back to r 851": tout simplement parce que le local subversion exécutable ne sera pas un avis, les modifications locales, et ne sera pas pris la peine de télécharger quoi que ce soit au référentiel en ligne.

Et, comme déjà répondu, à l'inverse de fusion fonctionne - mais dans ce cas, on ne doit pas reposer sur le raccourci de la syntaxe, mais surtout de l'état:

svn merge -r HEAD:851 l3toks.dtx
--- Reverse-merging r854 through r852 into 'l3toks.dtx':
U    l3toks.dtx

Je dois l'admettre - je ne comprendrais jamais la phrase "Renverser-fusionner r854 par r852 dans le fichier" pour dire "Viens r851 de votre fichier, et remplacé à tout ce que vous avait déjà localement et il est marqué comme différente de la dernière révision, de sorte que vous pouvez vérifier en arrière en ligne comme un nouveau "rollback" révision", mais je suppose (et espère :) ) qu'est ce qu'il fait :)

Après cela, on peut utiliser svn diff pour un rapide faire-bien sûr, si nous avons obtenu le droit de révision de retour à l'échelle locale; aussi, le fichier sera marqué avec un point d'exclamation rouge dans Tortoise/RabbitVCS (qui est différente de la dernière version), et donc, svn ci -m "rolled back to r 851" pouvez exécuter cette fois.

Notez également que si vous, enfin, de changer d'avis après inverse de fusion (c'est à dire de toute façon vous souhaitez continuer à travailler sur la dernière version de TÊTE, ici 854 - après avoir roulé vers 851 localement, mais n'ont pas encore engagé la restauration), vous ne devriez pas utiliser svn up, car il sera tout simplement dire qu'il est déjà "À la révision 854"; utiliser à la place svn revert --recursive . ou similaire...

Cheers!

Ref: Comment faire pour annuler les Modifications à l'aide de la Subversion - Jacob Wright – Flex, AIR, PHP, etc.

EDIT: ... et apparemment, exactement le même effet que l' svn merge -r HEAD:851 l3toks.dtx, peut être réalisé avec:

svn export -r 851 l3toks.dtx
A    l3toks.dtx
Export complete.

10voto

Igor Points 101

J’ai récemment eu à revenir à une révision particulière à déboguer un plus âgés et cela a fonctionné comme par magie :

J’ai eu à résoudre tous les conflits à l’aide d’option « tc », que j’ai se soucient pas des modifications locales (vérifiées dans tout ce que je m’intéressais à avant de revenir)

Pour revenir à la révision de tête était simple aussi :

Cordialement, Igor

5voto

rmeador Points 15107

Ce que vous cherchez s’appelle une « fusion inversée ». Vous devez consulter la documentation concernant la fonction de fusion dans le livre SVN (comme luapyad, ou plus précisément le premier intervenant sur ce poste, fait remarquer). Si vous utilisez la tortue, vous pouvez aussi simplement aller dans l’affichage du journal et faites un clic droit et choisissez « restaurer les modifications de cette révision » sur celui où vous avez fait l’erreur.

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