2008-11-19 8 views
23

Comment puis-je supprimer les anciennes révisions de mon référentiel de subversion de développement? Je garde un sandbox subversion dans lequel j'ai beaucoup de projets de test, des binaires, etc. Je voudrais tailler l'histoire de temps en temps.Comment puis-je élaguer les anciennes versions de Subversion?

+0

Question similaire: http://stackoverflow.com/questions/1294568/how-to-er-sensitive-information-from-subversion – sleske

Répondre

27

est ici la réponse officielle:

Il y a des cas particuliers où vous pourriez vouloir détruire toutes les preuves d'un fichier ou de commettre. (Peut-être que quelqu'un a accidentellement commis un document confidentiel.) Ce n'est pas si facile, parce que 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éant un chaos dans toutes les révisions suivantes et pouvant invalider toutes les copies de travail.

Le projet a cependant prévu d'implémenter une commande svnadmin obliterate qui accomplirait la tâche de supprimer définitivement les informations. (Voir le numéro 516.)

En attendant, votre seul recours est de svnadmin vider votre dépôt, puis rediriger le fichier dump via svndumpfilter (en excluant le mauvais chemin) dans une commande svnadmin load. Voir le chapitre 5 du livre Subversion pour plus de détails à ce sujet.

trouvés ici: http://subversion.tigris.org/faq.html#removal

4

Vous pouvez utiliser svndumpfilter.

Cependant, ce n'est vraiment pas une chose à faire. Les référentiels sont censés être (pour la plupart) des bases de données d'ajout seulement. Une certaine quantité de données de mutation est tolérable grâce à la nature centralisée de la base de données, mais ce n'est pas censé être une opération de routine.

Vous devriez probablement utiliser un référentiel distinct pour chaque projet au lieu d'un référentiel de sac que vous voudrez élaguer de temps en temps.

2

Vous ne voulez pas vraiment élaguer l'histoire, de sorte que la folie.

Vous pouvez supprimer les anciennes branches afin qu'elles n'apparaissent pas dans votre navigateur svn, mais c'est aussi simple qu'un 'svn rm'. Les révisions restent dans le système de contrôle de version.

5

Jon - nous ne sommes pas d'accord. Il y a des moments où il est approprié d'élaguer des données «très anciennes» dont nous sommes certains qu'elles ne seront plus nécessaires car elles sont sauvegardées dans d'autres médias. Prenons l'exemple d'un système qui suit automatiquement les versions des fichiers de configuration. À un moment donné, il est logique de dire: «Nous savons que nous n'avons plus besoin d'avoir la configuration telle qu'elle était il y a un an pour être en ligne. en ligne dans les systèmes de production n'est pas une bonne chose. " C'est l'exemple parfait de la possibilité d'archiver facilement les très anciennes données, puis de les supprimer du référentiel. J'ai trouvé un moyen de contourner le problème, mais je pense que c'est un vrai hack que je dois effectivement relire l'histoire à partir d'un certain moment à travers toutes les révisions pour créer un nouveau référentiel afin de remplacer l'ancien.

+2

Oui, c'est un bon point valable. Cependant, Subversion rend * très * difficile l'élagage des anciennes données. Dans d'autres VCS c'est un peu plus facile (par exemple en git), mais tous les VCS que je connais supposent que normalement vous ne coupez pas. Si vous voulez expirer régulièrement de vieilles données, un VCS n'est pas le bon outil. – sleske

Questions connexes