Est-il possible sur le serveur svn de supprimer une révision comme si elle n'avait jamais existé?
Nous avons donc les révisions suivantes:
1004 // Commit of some bogus code that broke the build and was just wrong
1003 // Change 1.2
1002 // Change 1.1
1001
1000 *** Initial checkin
Pouvons-nous retirer le 1004 de svn et revenir à 1003 comme si le 1004 n'avait jamais existé?
Pardonnez mon ignorance, j'apprends toujours comment utiliser SVN.
Les systèmes VCS sont conçus spécifiquement pour rendre cela aussi compliqué que possible. Vous ne voulez généralement pas faire cela.
Cela étant dit, d'après la documentation officielle:
Il existe des cas spéciaux dans lesquels vous pourriez vouloir détruire toutes les preuves d'un fichier ou d'une validation. (Peut-être que quelqu'un a accidentellement commis un document confidentiel.) Ce n'est pas si facile, car Subversion est délibérément conçu pour ne jamais perdre d'informations. Les révisions sont des arbres immuables qui se construisent les uns sur les autres. Supprimer une révision de l'historique provoquerait un effet domino, créerait le chaos dans toutes les révisions ultérieures et invaliderait éventuellement toutes les copies de travail.
Le projet prévoit toutefois de mettre en place un jour une commande
svnadmin obliterate
permettant de supprimer définitivement les informations. (Voir numéro 516 .)En attendant, votre seul recours consiste à
svnadmin dump
votre référentiel, puis canalisez le fichier de vidage viasvndumpfilter
(à l'exception du mauvais chemin) dans une commandesvnadmin load
. Voir chapitre 5 du livre Subversion pour plus de détails à ce sujet.
Ces accidents sont fréquents et ce n'est pas un problème si SVN les garde dans son histoire. Ce qui est important, c'est de réparer l'accident. Pour ce faire, vous devez annuler les modifications apportées par ce commit. utilisez les commandes suivantes:
svn merge -r [current_version]:[previous_version] [repository_url]
svn commit -m “Reverting previous commit and going back to revision [previous_version].”
Si vous utilisez TortoiseSVN, vous pouvez simplement afficher les journaux, sélectionner la validation et choisir "Annuler les modifications de cette révision" dans le menu contextuel. Votre copie de travail sera remplacée par la version précédente et vous devrez simplement valider.
Je suppose que d'autres clients graphiques ont la même option.
Vous pouvez déplacer le coffre dans une autre branche (sauvegarde) et copier la révision appropriée dans le coffre.
svn mv trunk https://svn_path/tags/trunk_broken
svn cp -r revNo http://svn_path/tags/trunk_broken http://svn_path/trunk
Veuillez noter que le numéro de révision sera incrémenté et que toutes les modifications seront affichées dans svn log.
Je recommande de laisser la révision si vous n'avez pas de raison réelle (manque d'espace par exemple) pour la supprimer. Il s’agit du travail principal du serveur SVN, qui consiste à conserver les modifications.
Vous pouvez créer une sauvegarde du référentiel actuel et ignorer la révision fictive dans la sauvegarde. Vous pouvez ensuite charger la sauvegarde dans un nouveau référentiel sur le même serveur ou sur un autre.