Voulez-vous supprimer les révisions de mon référentiel SVN

33

Les dernières révisions de mon dépôt de code ont été corrompues et ont déstabilisé mon application. Je veux revenir à une révision antérieure.

Mais je ne veux pas simplement utiliser «revenir» sur ma copie de travail; En fait, je souhaite supprimer ma révision principale et plusieurs révisions antérieures dans mon référentiel, ce qui "rétablira" mon référentiel en une révision antérieure, qui deviendrait la révision principale. Quelqu'un sait comment je ferais ça?

Sathyajith Bhat
la source
1
Vous ne pouvez pas vraiment supprimer les anciennes révisions. Tout ce que vous pouvez faire, c'est inverser les modifications et les valider, comme mentionné par Felix. Sidenote, Git (ainsi que d’autres solutions de contrôle de version) vous permet réellement de vraiment supprimer les révisions.
davr
3
Oui, vous devez simplement accéder au référentiel SVN avec svnadmin. Voir ma réponse ci-dessous.
martin
davr a techniquement raison. Ce que vous décrivez est le dumping de toutes les révisions sauf les mauvaises, puis le tout par-dessus l'ancien repo. Dans mon esprit, ce n'est pas vraiment la même chose que «supprimer» une révision.
Sirex

Réponses:

12

Peut-être que ce lien vous aide:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

Citation:

  1. Accédez au répertoire supérieur de votre copie de travail (en supposant que vous souhaitiez annuler l'intégralité de la copie de travail).

  2. run svn revertpour rétablir les fichiers de votre copie de travail dans l'état où ils se trouvaient la dernière fois que vous avez commis / extrait.

  3. lancez svn status -vpour voir à quel numéro de révision votre copie de travail correspond maintenant (c'est le numéro de révision le plus élevé dans la liste qui svn status -vproduit).

  4. run svn merge -rXX:YYXXest le numéro obtenu à l'étape précédente et YYle numéro de la révision à laquelle vous souhaitez revenir.

  5. Terminé! La seule exception à cette règle est que les fichiers de votre copie de travail qui n'existaient pas au moment de la révision YYont toujours été conservés, car par défaut, svn ne supprime rien. Si vous voulez vous en débarrasser, lancez un svn del [filename]sur chacun d'eux.

  6. Bien joué! Jouez maintenant avec votre copie de travail comme si toutes ces modifications intermédiaires ne s'étaient jamais produites. Et lorsque vous êtes prêt à engager vos efforts, utilisez simplement svn commit comme d'habitude!

Félix
la source
1
Sous Windows OS, l'option n ° 4 est exécutée. svn merge -rXX:YY .N'oubliez pas de mettre un point en fin de ligne pour référencer le répertoire en cours. Et dans TortoiseSVN, il existe une option pour inverser la fusion.
Shantha Kumara
3
Cela ne revient pas réellement à "une révision antérieure, qui deviendrait la révision principale". Cela ne fait pas de l'ancienne révision la HEAD. Au contraire, cela crée un nouveau HEAD. Voir la réponse de Martin.
Matthew Flaschen
J'ai modifié la réponse pour inclure la remarque de Shantha sur la période de fuite. C'est la même chose sur * nix.
Mike Kormendy
72

Cela a fonctionné pour moi. Étant donné que vous avez la révision 1234 en tant que HEAD et que vous souhaitez annuler les trois derniers commits:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo
Martin
la source
12
+1 Vous êtes le seul à avoir compris la question et à avoir donné une réponse précise.
Matthew Flaschen
6
C'est techniquement la bonne réponse. Toutefois, il convient de noter que ceci, en plus d'être peut-être assez compliqué à faire, annulera également toutes les copies extraites. Vous devrez donc alerter tous ceux qui utilisent également le référentiel.
Sleske
1
rapide et facile et au point et en fait ce que l'affiche a demandé.
Inconnu
7
Tant que vous vous assurez de copier également l'UUID du référentiel sur le nouveau référentiel (voir "svnadmin setuuid", copie de l'UUID dans "svn info" sur l'ancien référentiel), seules les extractions mises à jour avec les révisions que vous coupez seront effacées. être invalidé.
Bryan Petty
1
Sur les nouveaux dépôts, vous devrez peut-être fixer les autorisations sur les fichiers ou copier des fichiers dans les répertoires hooks / conf
AdamS
5

Je sais que c'est une vieille question, cependant, je viens de trouver comment faire cela avec Windows / TortoiseSVN.

Comme suggéré, vous ne pouvez pas "supprimer" une révision, mais vous pouvez créer une révision plus récente, identique à la révision à laquelle vous souhaitez revenir.

  1. Vérifiez le HEAD du référentiel pour le répertoire à partir duquel vous souhaitez annuler la révision.
  2. Chargez la vue "Show Log" dans TortoiseSVN pour le répertoire de niveau le plus élevé que vous souhaitez restaurer (par exemple, "Trunk").
  3. Cliquez avec le bouton droit sur la révision que vous souhaitez supprimer. REMARQUE: il s'agit de la révision que vous souhaitez supprimer, et non de celle à laquelle vous souhaitez revenir.
  4. Sélectionnez "Annuler les modifications de cette révision".
  5. Cliquez sur "Oui" à l'invite.
  6. Mettez à jour la caisse comme d'habitude, mais sur "HEAD".
  7. Engagez-le en arrière.

Vous devrez ensuite aller voir toutes les personnes qui l'ont vérifié et les faire mettre à jour et assurez-vous de supprimer tous les nouveaux fichiers.

En outre, vous devez vous assurer que tout le monde sait quelle révision a été effectuée et éventuellement mettre à jour la description.

Martin
la source
En quoi cela diffère-t-il de la procédure normale "Revert"?
Tomer W
Rétablir change simplement votre copie de travail en ce qui est dans le référentiel ... voici comment faire en sorte que le HEAD d'un rapport reflète l'état de tout commit précédent.
Martin
1
Merci pour cela - En faisant cela, la méthode de la tortue SVN était exactement ce dont j'avais besoin pour annuler un commit erroné :)
Dr. Andrew Burnett-Thompson
Il existe également une entrée de menu contextuel " Revenir à cette révision " dans la fenêtre du journal.
Uwe Keim
4

Vous pouvez utiliser dump / load à cette fin.

Vous pouvez également utiliser svnsync pour faire une sauvegarde sur une révision.

Si vous avez un grand référentiel, cela prend du temps.

Bac Du Vietnam
la source
3

Pour moi (VisualSVN, 30-HEAD) fonctionne comme ceci:

  del C: \ Repositories \ MyRepo \ revs \ 0 \ 30
  del C: \ Repositories \ MyRepo \ revs \ 0 \ 29
  del C: \ Repositories \ MyRepo \ revs \ 0 \ 28
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 30
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 29
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 28
  echo 27> C: \ Repositories \ MyRepo \ db \ current
  

Anton Golikhoff
la source
Comment est-ce mieux que d'autres réponses?
Toto
C'est beaucoup plus rapide.
Anton Golikhoff le
0

Accédez au terminal et accédez au répertoire svn: tapez maintenant

svn update -r "numéro de révision que vous souhaitez rétablir"

Mohd Ikram
la source
2
Bienvenue sur Super User! Veuillez relire attentivement la question. Votre réponse ne répond pas à la question initiale. OP dit "Je ne veux pas simplement utiliser 'revert' sur ma copie de travail"
DavidPostill