2009-09-27 7 views
11

J'utilise l'application Versions sur un Mac pour gérer un référentiel SVN pour mes fichiers. Ma copie de travail est d'environ 6   Mo, mais mon référentiel est seulement 1,4   Mo, et j'ai cinq révisions dans le dépôt!Le dépôt Subversion a une petite taille de fichier par rapport à la copie de travail?

Comment cela peut-il être?

+0

La compression pourrait l'expliquer, mais honnêtement je ne sais pas. 75% de compression n'est pas inconnu pour le texte pur. –

+0

(Notez que c'est environ 75% parce que SVN ne contient que des changements, pas des copies complètes de chaque révision)) –

Répondre

18

SVN compresse une version de votre code les différences entre chaque version. C'est pourquoi cela ne prend pas beaucoup de place.

Pour garder le petit dépôt, Subversion utilise deltification (ou stockage deltified) dans le dépôt lui-même. La suppression consiste à coder la représentation d'un bloc de données en tant que collection de différences par rapport à un autre bloc de données. Si les deux données sont très similaires, ce deltification entraîne des économies de stockage pour le deltified morceau plutôt que de prendre l'espace égale à la taille des données originales, il prend seulement assez espace pour dire, « Je regarde comme ça autre donnée ici, à l'exception pour le couple suivant des changements. » le résultat est que la plupart des données de dépôt qui tend à être volumineux, à savoir le contenu de fichiers versionnés -est stocké à une taille beaucoup plus petite que la représentation en texte intégral de ces données. Et pour les dépôts créés avec Subversion 1.4 ou version ultérieure, les économies d'espace sont encore mieux-maintenant ceux les représentations de texte intégral du fichier sont elles-mêmes compressées.

Plus de détails peuvent être trouvés here

5

Votre copie de travail contient normalement un grand nombre de fichiers temporaires supplémentaires tels que le code objet et les en-têtes précompilés qui ne sont pas tenus d'être contrôlée révision. Je suppose que si vous nettoyez la copie de travail, ou faites un nouveau contrôle, il sera beaucoup plus petit.

+2

Ceci est vrai, mais pour les raisons expliquées par Nawaman et wcoenen, même une copie de travail propre nouvellement extraite avec aucun généré les fichiers (tels que les en-têtes précompilés et le code objet) peuvent être significativement plus grands que le référentiel: la copie de travail a deux copies de chaque fichier non compressé (travail et vierge), tandis que le dépôt possède 1 copie compressée de chaque fichier être très petit si les changements étaient localisés). –

2

Voici quelques raisons que je peux penser à - svn stocke vos révisions sous forme de changesets et non de fichiers versionnés. - svn stocke les données dans son backend (FSFS/BDB) qui a quelques techniques de compression qui réduisent la taille. Si le référentiel contient plus de fichiers basés sur le texte, plus la compression est importante, plus la taille peut être importante. - Pour supporter peu de commandes (comme svn info, diff, etc) sans connexion réseau (pour avoir aussi des résultats plus rapides), svn maintient des informations supplémentaires dans les répertoires .svn. Les informations supplémentaires comprennent une copie de l'ensemble de la copie de travail.

8

La réponse de Nawaman a déjà expliqué que les données dans le référentiel sont compactées assez efficacement.

L'autre moitié de l'histoire est que subversion conserve un pristine copy de chaque fichier dans les dossiers .svn de votre copie de travail. Cela permet à subversion de gérer les commandes svn status ou svn diff sans avoir besoin de contacter le serveur de référentiel, mais double la taille de votre copie de travail.

Questions connexes