2009-10-30 6 views
1

J'utilise Tortoise SVN.Revenir de la révision

J'avais vérifié récemment un crapload de code (un commit). Au cours d'une réunion de trois heures, ils ont décidé de mettre au rebut une bonne partie de mon code et de cette fonctionnalité. Mon patron veut que je mette Subversion en place avec l'ancien code pour cette zone de l'application.

Je dirais qu'il y avait environ 3-4 fichiers affectés. Meaing dans ce dernier commit où j'ai engagé les nouveaux changs de fonctionnalités, je vais devoir retourner ces fichiers à l'état dans lequel ils se trouvaient avant de les avoir vérifiés.

Donc, je ne comprends pas vraiment quoi Revert Retour à la révision fait. Je suis allé de l'avant et a trouvé la version la plus récente de ces fichiers dans les commits passés dans le journal et le clic droit sur ces fichiers dans le journal et a fait revenir à la révision.

Maintenant, cela remplace-t-il complètement ma copie locale par l'ancienne version? Est-ce que je l'ai fait correctement si je voulais seulement retourner un sous-ensemble de la fonctionnalité que j'ai enregistrée en dernier?

Alors, est-ce que je perds tous les changements une fois que je suis revenu sur ma version locale de ce fichier? On dirait qu'il fusionne le plus ancien avec mon local qui a un code plus récent ... euh, pas exactement ce à quoi je m'attendais.

(oui, j'ai lu la page à ce sujet de docs de subversion et ce n'est pas très clair ou approfondi sur ce que cela signifie en dehors de la technique ils le mettent brièvement à un très haut niveau et ignore les fondements de ce qui se passe réellement localement dans votre copie de travail)

permet donc résumer ce que je l'ai fait:

  1. j'ai vérifié dans un tas de changements à un moment donné.
  2. collegue obtient cette mise à jour via une mise à jour svn
  3. Nous avons une réunion, le patron dit que nous dévalez que
  4. fonction
  5. Cette caractéristique était d'environ 3-4 fichiers de la liste des fichiers qui ont été commis dans cette révision
  6. Je veux mettre ces fichiers spécifiques dans un état où ils étaient avant ... certains seront retournés à Révision x certains à y, etc. parce que les derniers changements apportés à certains de ces fichiers ont été faits à différents numéros de révision . Je commence donc avec le journal. Je cherche le premier fichier. Appelons-le somefile1.aspx. Je trouve que la dernière version de ce fichier a été archivée à la Révision X. Je fais donc un clic droit dans le jeu de modifications de cette révision et je retourne à Revision
  7. Je remarque qu'il semble que le code de cette révision soit fusionné avec ma copie locale ?? Je pense ... pas sûr que c'est pour ça que je pose parce que je ne comprends pas ça.
  8. Je fais la même chose pour 3 autres fichiers ... recherche la dernière fois qu'ils ont été validés et clique-droit sur eux dans la révision spécifique et fais un retour à la révision sur eux ... en supposant que cela mettra ma version locale dans cet état ainsi et à peu près effacer mes changements aussi pour ce fichier localement

mais je suis un peu fragile et confus sur tout cela. Si je me rapproche de ce droit et si je devrais utiliser revenir en arrière et ce que le diable il fait en fait sous les couvertures. Je vois que c'est fait une fusion mais quoi ?? Je veux juste remettre ces 4 fichiers spécifiques à un état précédent ... pas tout le commit que je viens de commettre que je mentionne au début ici ... juste des fichiers spécifiques liés à un domaine spécifique de code ..le reste peut rester commited et être téléchargé par quiconque texte else.strong

+0

Pourriez-vous expliquer plus précisément ce que vous avez fait? Avez-vous utilisé la ligne de commande svn client (si oui, quelles commandes) ou un client svn gui spécial? C'est difficile à imaginer, ce que tu as fait. – Michael

+0

a mis à jour le poste – PositiveGuy

+0

Veuillez corriger le formatage. – liori

Répondre

1

Vous pourriez être intéressé par ma réponse à une question très similaire il y a un moment:

How to remove 1 revision of a folder in Subversion

Fondamentalement, votre meilleur plan d'action est probablement de re-vérifier le code à la révision précédente, puis validez ce code comme la dernière révision. Si vous constatez qu'il fusionne l'ancienne copie avec la version qui se trouve sur votre disque, la meilleure solution consiste à supprimer votre copie locale, puis de vérifier proprement la révision spécifiée du fichier. Une fois que vous l'avez, vous pouvez le recommencer.

+0

suis-je foutu maintenant que j'ai fait quelques réversion à partir de révisions sur plusieurs fichiers de révision? Il a fait une sorte de fusion locale qui me fait peur. – PositiveGuy

+0

son est différent. Il veut revenir à une révision complète. Je veux seulement revenir en arrière quelques dossiers d'une dernière révision du mien que j'ai commmited. – PositiveGuy

+0

Si je re-vérifier le code, alors je suis foutu. Je ne peux plus utiliser la copie de travail existante qui pourrait avoir des changements plus récents. – PositiveGuy

2

En supposant que vous souhaitez annuler les modifications apportées dans la révision 1234: fusionnez simplement les différences de 1234 à 1234-1.

En CLI ce serait: svn merge -r 1234:1233 http://your-repo/ && svn ci

Dans TortoiseSVN, obtenir une boîte de dialogue de fusion, « Fusionner une plage de révisions », entrez 1234 comme la révision de fusion et cliquez sur « fusion inversée ». Ensuite, vérifiez si vous n'avez pas eu de conflits (avec les changements que d'autres personnes ont fait après 1234), et faites un check-in. Alors votre révision HEAD n'aura pas ce code.

Je ne suis pas sûr si vous pouvez le faire sur des fichiers spécifiques dans TortoiseSVN. Je l'ai fait dans CLI, et vous pouvez essayer aussi (outil CLI, TortoiseSVN, AnkhSVN, ils partagent tous des métadonnées). Le SVN se rappellera toujours que vous avez écrit ce code, et c'est pour cela qu'il est conçu. S'il n'y a pas de véritables raisons de retirer ce code de SVN (comme, juridique ou chantage ou autre), conservez-le.

+0

Je viens de montrer le journal et puis dans ma dernière révision, un clic droit sur ces fichiers et a fait un retour à des changements de cette révision. Je suppose qu'il semble qu'il l'a remplacé par la dernière version archivée de ce fichier ... ou alors il semble – PositiveGuy

+0

Oh, j'utilise zsh comme mon shell; vous devrez peut-être changer && dans cette ligne CLI à quelque chose de différent si vous utilisez cmd.exe ... – liori

2

coffeeaddict —

revert et update sont les deux termes trompeurs ici. Vous ne faites aucun de ceux-ci. Vous êtes des changements de "fusion inverse".

Vous pouvez penser à une fusion inversée en faisant le changement inverse ... donc si une révision a ajouté une ligne à un fichier, la fusion inverse de cette modification supprimera cette ligne du fichier.

En TortoiseSVN, la façon dont vous le faites est:

  1. Commencez avec votre copie de travail mis à jour
  2. Tirez le journal
  3. Cliquez sur la révision qui contient les modifications que vous souhaitez annuler
  4. Cliquez avec le bouton droit sur un fichier que vous voulez annuler et sélectionnez "Annuler les modifications de cette révision"
  5. Répétez l'étape 4 pour chaque fichier à annuler
  6. Vous verrez que cela a entraîné des modifications locales à ces fichiers dans votre copie de travail. Voici ce que tu veux; C'est comme si vous annuliez les modifications en éditant manuellement les fichiers. Mais vous ne perdrez aucun changement suite aux révisions effectuées après celle que vous avez annulée.
  7. résoudre tout conflit qui se posaient
  8. Commit

Maintenant, vous avez défait seulement les changements qui ont eu lieu dans cette révision particulière, sans jeter des changements depuis que vous souhaitez conserver.

Questions connexes