Question

Depuis quelques années, je suis en attente de Subversion à disposer d'un « supprimer définitivement » (oblitérer) fonction. Je hésite à faire la transition vers Subversion (en provenance de Visual SourceSafe: p), parce que je pense que cela est une caractéristique essentielle, sinon j'attends le dépôt de croître unstopably. Cependant, pour une raison ou l'autre, la fonction se reportée encore et encore. Je commence donc demandais s'il y a une autre caractéristique ou solution de contournement qui rend la fonction oblitérer dispensable.

Que faites-vous lorsque vous voulez réduire le dépôt central SVN?

Exemple 1 : I dans un grand bibliothèque tiers , et après quelques semaines, je me rends compte qu'il ne convient pas à mes besoins. Je ne veux pas que pour stocker et sauvegarder cette grande quantité de données pour toujours.

Exemple 2 :. J'ai 10 versions de 10 grandes bibliothèques de tiers dans le référentiel, mais j'utilise uniquement les dernières versions

Exemple 3 : Je suis arrivé accidentellement des informations sensibles (comme suggéré par John ).

Exemple 4 :. J'ai accidentellement vérifié dans certains grands dossiers qui ont jamais été destinés à être mis dans le référentiel

Était-ce utile?

La solution

Il y a une bonne quantité de discussion de svn obliterate sur le ticket de problème Apache site Subversion , la plupart de la fin 2008. il semble au sujet d'un accord général que c'est une bonne capacité d'avoir, bien que son utilisation devrait être rare.

Il y a deux principales raisons de le vouloir.

Tout d'abord, la vérification des informations confidentielles peut être un problème. Laissant là-bas, supprimé, n'est pas nécessairement une option, selon le niveau de confidentialité et de l'exposition du dépôt.

En second lieu, vérifier dans une grande quantité de choses qui ne devrait pas être vérifiée peut augmenter considérablement la taille du dépôt. L'espace disque est généralement pas cher de nos jours, mais il est pas illimité, et il y a d'autres façons de l'espace fichier matière peut-elle. S'il est nécessaire d'envoyer un dépôt sur une connexion réseau, qui est le temps supplémentaire qui peut ou non être important. Il peut y avoir des avantages réels pour pouvoir graver un CD-ROM ou DVD-ROM qui contient le référentiel entier.

Par conséquent, il est une capacité utile qui est actuellement fait par le dumping, le filtrage et le rechargement du dépôt. Ceci est sujette aux erreurs selon les rapports que j'ai vu, peut être lent et nécessite la fermeture du dépôt.

De toute évidence, ce n'est pas une caractéristique de haute priorité pour l'équipe de Subversion, étant donné que ce qu'il est nécessaire pour un certain nombre d'années est quelqu'un pour faire le travail pour arriver à une conception et sa mise en œuvre. Après tout, cela devrait être fait très rarement, et il y a une solution de contournement. Cependant, tous ceux qui veulent faire pourrait fournir un patch qui (si elle est assez bonne qualité) être probablement mis en œuvre beaucoup de travail sur Subversion.

Autres conseils

Il viole le sens du contrôle de code source.
Source de contrôle est d'être en mesure de restaurer un état antérieur. Si vous supprimez un fichier en permanence, vous ne pourrez.

OTOH je ne sais pas VSS donc je aurais peut-être mal compris « supprimer définitivement »

La raison évidente contre c'est parce que les développeurs pensent que ce sera sur l'équilibre faire SVN pire - le bonheur que vous sentez à pouvoir élaguer des choses non nécessaires sera largement éclipsée par votre colère lorsque vous détruisez accidentellement quelque chose et votre / trunk disparait.

FogBugz a exactement le même comportement, et dans leur cas, il est tout à fait par la conception, je crois, la protection des utilisateurs eux-mêmes.

Anéantissement viole les principes de contrôle de version que vous voudriez avoir. Soit vous ne sauverait pas d'espace, ou les balises précédentes deviendriez cassé. Vous ne seriez pas en mesure de revenir à une véritable version précédente si vous aviez effacé tous les fichiers.

En ce qui concerne vos commentaires sur le dépôt de plus en plus ... Tout dépôt va croître de façon linéaire avec la taille des changements au fil du temps. C'est le point de l'ensemble d'un système de contrôle de code source. Si vous n'avez pas besoin d'être en mesure de suivre les versions antérieures, alors pourquoi ne pas simplement coller à un dossier partagé quelque part?

Citant Subversion Anéantissement, la fonction oubliée , il y a trois éléments à la question, le problème , raison et la solution . Depuis que vous avez commencé avec la question à la solution, je vais commencer par cela.

Solution

Comme vous l'avez remarqué, il n'y a pas une grande solution. Surtout si vous faites affaire avec un grand référentiel d'entreprise, puisque la solution devient plus difficile plus le repo obtient. Il y a une fonctionnalité appelée dump / filtre par que vous pouvez nettoyer votre repo de choses que vous ne voulez pas, mais il est pas facile à utiliser, rapide et non pas dépendants.

Il a été petit effort (suivre le fil ) sur l'équipe svn pour obtenir une caractéristique oblitérer là après 2008, mais l'effort est mort une mort silencieuse.

Le problème

L'article je l'ai mentionné au début a fait une bonne liste de cas d'utilisation où l'on aurait besoin d'une commande Anéantissement et dans la section 516 fil d'émission les développeurs effectivement reconnu son mérite.

Hélas, il semble trop tard pour cela; la vraie raison pour laquelle il n'a jamais été ajouté plus tard, était que maintenant presque impossible de le mettre en œuvre, comme des crochets dans le code au niveau le plus fondamental (voir aussi petit effort lien sous Solution).

De la FAQ entrée :

  

Les révisions sont immuables arbres qui construisent les uns sur les autres. Suppression d'une révision de l'histoire entraînerait un effet domino, ce qui crée le chaos dans toutes les révisions ultérieures et éventuellement invalider toutes les copies de travail.

La raison

Le problème est que l'origine de la fonction Anéantissement a été rejetée car il n'a pas été conforme au principe de la véritable contrôle de version.

Encore une fois de la FAQ entrée :

  

Comment puis-je supprimer complètement un fichier de l'histoire du dépôt?    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 commis accidentellement un document confidentiel.) Ce n'est pas si facile, parce que Subversion est délibérément conçu pour ne jamais perdre l'information .

Cependant

J'ai travaillé avec SVN pour beaucoup de clients maintenant avec des équipes plus grandes et plus grand projet et, fondamentalement, n'a jamais eu un vrai problème. Oui, les cas d'utilisation mentionnées justifient une caractéristique Anéantissement, mais jusqu'à présent, je ne suis pas convaincu que cela est un problème que vous avez encore et encore partout où vous allez. Ofcourse, la nature de ce problème particulier est que vous suffit de faire une erreur une fois et il ne peut pas être annulée correctement.

Parce que la suppression des données du référentiel rompt le principe de base du contrôle de code source, cela étant qu'il est possible de reproduire tous les états antérieurs et des changements à l'arbre source. Si vous voulez effacer quelque chose du contrôle de version, vous êtes probablement « Doing It Wrong », comme on dit.

J'utilise différents systèmes de contrôle de version pendant environ 15 ans et n'a jamais besoin d'une caractéristique comme celui-ci.

Je me demande quelles sont les raisons que vous voulez cette fonctionnalité:

  • espace disque? Difficile à croire vu le prix de l'espace disque
  • Commité un mot de passe pour le contrôle de version? Eh bien qui vous apprendra. Allez changer le mot de passe
  • vitesse du dépôt? Cela ne semble pas, mais si je considérerais un système complètement différent avec des performances soi-disant mieux.

Il est possible de réduire la taille d'un dépôt SVN en faisant une décharge et charge. Essentiellement, si vous dites que vous ne voulez jamais revenir à quelque chose de plus que quelques ans il est possible de vider le dépôt, le filtre en fonction du temps, puis recharger la décharge. Voulant se débarrasser d'un seul fichier en raison de la taille est probablement une indication que le fichier n'appartenait vraiment dans un système de contrôle de code source en premier lieu.

Il y a quelques scripts qui vous aide à combattre les données. Suivez ce fil de discussion liste de diffusion pour plus d'informations.

Il est une façon difficile de le faire comme l'essence du contrôle de version ne perd pas de données, par opposition à le supprimer définitivement. Mais si vous taillez une fois par an ou quelque chose comme ça qu'il peut faire.

Le point entier de contrôle de source est d'avoir une histoire complète de ce que votre référentiel ressemble. Les défaites de commande obliterate cette but de contrôle de code source, et il est un disfonctionnement dans tous les systèmes de contrôle de version qui l'ont.

SVN a copie pas cher et pas cher qui ne branchement nécessite pas une copie complète du fichier - seulement les bits modifiés. Son dépôt central est généralement très facile à gérer, rendant leur utilisation ce disfonctionnement inutile.

Anéantissement n'est pas une caractéristique essentielle de Subversion, car il rompt effectivement les principes de base du contrôle de version (qui est: pour enregistrer toute l'histoire).

Et ce n'est pas une caractéristique essentielle car il y a solution de contournement pour obtenir ce fait de toute façon (en utilisant svnadmin et filtrage).

En outre, la fonction est actuellement très travaillé. Voir cette post pour plus de détails.

dernier je l'ai vérifié a été conçu comme une caractéristique ADMIN et l'administrateur peut déjà vider / filtre / broken_workaround et supprimer l'historique de toute façon. En ce qui concerne la piste d'audit, cela ne change pas la citation actuelle. Il serait moins horrible, si quelque chose doit absolument supprimée.

Anéantissement svnadmin est l'une des fonctionnalités les plus demandées, enfin de la dev admettre qu'il devrait exister (enfin! Après 8 ans !!!). Et la publicité de celui-ci ne pas exister, est la chasse aux utilisateurs loin de SVN.

Malheureusement, je devais en apprendre davantage sur cette « fonctionnalité manquante » à la dure. Depuis quand est la fonctionnalité de base une fonctionnalité? Les nouveaux utilisateurs commencent à entendre parler et éviter SVN. Quant à moi, je vais maintenant utiliser Git.

Ne pas que mon opinion? Linus fait référence aux développeurs SVN comme des crétins, et l'ensemble du système centralisé viciée. Je fais confiance Linus comme un véritable expert, et plus précisément, il est au courant de la source.

Qu'est-ce que je fais - pas utiliser la subversion. Désolé.

Ils (les développeurs) obvoiously ne sont pas d'accord avec votre évaluation de cet être une caractéristique essentielle. N'a pas empêché l'entreprise où je travaille à au moment de l'utiliser;.) Je règle sur la subversion pour personaly cette raison exacte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top