2008-09-24 16 views
30

Supposons que j'ai un ensemble de commits dans un dossier de référentiel ...révisions spécifiques dans Défaire Subversion

123 (250 new files, 137 changed files, 14 deleted files) 
122 (150 changed files) 
121 (renamed folder) 
120 (90 changed files) 
119 (115 changed files, 14 deleted files, 12 added files) 
118 (113 changed files) 
117 (10 changed files) 

Je veux obtenir une copie de travail qui inclut toutes les modifications en avant de la révision 117, mais ne comprend pas les modifications pour les révisions 118 et 120.

EDIT: pour peut-être rendre le problème plus clair, je veux annuler les modifications qui ont été faites dans 118 et 120, tout en conservant tous les autres changements. Le dossier contient des milliers de fichiers dans des centaines de sous-dossiers.

Quelle est la meilleure façon d'y parvenir?

La réponse, grâce à Bruno et Bert, est la commande (dans ce cas, pour enlever 120 après la pleine fusion a été réalisée)

svn merge -c -120 . 

Notez que le numéro de révision doit être spécifiée avec leader moins. « -120 » non « 120 »

Répondre

31

Pour annuler les révisions 118 et 120:

svn up -r HEAD  # get latest revision 
svn merge -c -120 . # undo revision 120 
svn merge -c -118 . # undo revision 118 
svn commit   # after solving problems (if any) 

Voir aussi la description Undoing changes.

Notez le moins dans l'argument -c -120. Le commutateur -c (ou --change) est pris en charge depuis Subversion 1.4, les anciennes versions peuvent utiliser -r 120:119.

-2

Je suppose que vous pouvez créer une branche de la révision 117, puis fusionner tout sauf 118 et 120.

svn copy -r 117 source destination 

Ensuite, la caisse de cette branche et à partir de là faire svnmerge.py merge -r119,120-123

EDIT: Cela n'annule pas les révisions dans la branche/le tronc. Utilisez svn merge à la place.

+1

Je me demandais à ce sujet aussi ... mais le succès de cela ne dépendrait-il pas si les mêmes fichiers avaient été modifiés en 117, 118 et 119? N'y aurait-il pas un risque que vous récupériez un artefact du checkin 118? –

8

Il y a une façon plus simple si vous utilisez TortoiseSVN, un client Windows pour Subversion. Vous venez de cliquer pour voir le journal dans votre copie de travail mise à jour, sélectionnez les révisions que vous souhaitez annuler, faites un clic droit, et sélectionnez "Annuler les modifications de ces révisions".

Il s'agit d'une opération sûre car les modifications sont appliquées uniquement dans votre espace de travail. Vous devez toujours vous engager à modifier votre référentiel.

C'est l'une des meilleures fonctionnalités de TortoiseSVN. J'ai toujours été un type de ligne de commande, mais Tortoise a changé d'avis.

+1

Sur un Mac, le client SVN Cornerstone fait de son mieux. J'ai essayé Versions mais il ne peut pas rivaliser avec Cornerstone pour ce genre de travail. –

+0

+1 Très utile/simple pour ceux qui utilisent TortoiseSVN. Merci pour cela! –