55 votes

Comment fonctionne exactement la subversion de stocker des fichiers dans le référentiel?

J'ai lu le livre de subversion et il est clair pour moi que la subversion ne pas stocker des fichiers, mais uniquement des deltas afin de minimiser l'espace disque. Subversion a également fait de même avec les fichiers binaires (ce utilisé pour être un énorme faiblesse de CVS).

Cependant je ne comprends pas le mécanisme exact. Quand je commets un fichier de ce qui se passe?

  1. La Subversion ne stocke que les diff (et a déjà l'ancienne version)
  2. Subversion supprime la version précédente, enregistre le nouveau fichier intact et crée une inversion diff afin de "re-créer" l'ancienne version si nécessaire.
  3. Autre chose que je n'ai pas pensé.

Le premier cas semble le plus logique. Toutefois, cela soulève une autre question. Si j'ai dans un dépôt subversion, un fichier avec 1000 s'engage et un nouveau développeur récupère une copie propre, puis subversion aurait pour récupérer la version d'origine (importation initiale) et d'appliquer 1000 diff sur ce avant de retourner le résultat. Est-ce correct? Est-il une sorte de mise en cache pour les fichiers de la dernière version est conservée ainsi?

Fondamentalement, où puis-je trouver des informations sur le dépôt svn internes?

Mise à jour: Apparemment le backend de subversion joue un grand rôle dans cela. À l'époque ou de l'écriture FSFS utilise l'option 1, tandis que BDB utilise l'option 2. Grâce msemack!

19voto

Greg Hewgill Points 356191

Parce que la Subversion référentiel du format est entièrement interne, ils sont libres de modifier la représentation d'une révision à l'autre. Je crois que la révision actuelle généralement les magasins inverse deltas (option 2), mais aussi des magasins complète des instantanés périodiquement afin de ne pas avoir à résoudre des 1000 diff avant de retourner un résultat.

La Subversion 1.6 notes de version a une section sur le système de fichiers de stockage des améliorations qui a quelques notes sur ce, et des liens vers d'autres sources. Autant dire que les détails de la Subversion de stockage de données sont complexes et sujettes à changement.

Il y a aussi un document de conception dans la Subversion de l'arbre source qui décrit l'utilisation de sauter dans les deltas de la Subversion. En général, le /notes/ répertoire contient plusieurs documents utiles concernant la Subversion des éléments internes.

15voto

msemack Points 3116

12voto

Anton Gogolev Points 59794

De la Subversion de la Conception du document (ce qui est assez daté, tout de même), vous pouvez obtenir ceci:

Comme beaucoup d'autres systèmes de contrôle de révision, la Subversion stocke les modifications que les différences. Il n'est pas de faire des copies complètes de nœuds; au lieu de cela, il stocke la dernière révision complète du texte, et les révisions précédentes comme une succession de revers de diff (le mot "diff" est utilisé ici de façon vague – pour les fichiers, cela signifie vdeltas, pour les répertoires, il signifie un format qui exprime les changements de répertoires).

Je ne pense pas que c'était changé depuis.

Voir également la Bulle de la Méthode.

10voto

Jeyanthan Points 674

Je crois que le lien suivant pourrait être utile pour comprendre l'architecture fsfs

http://svn.apache.org/repos/asf/subversion/trunk/subversion/libsvn_fs_fs/structure

4voto

Zenon Points 792

le régulier FSFS spécification peut vous aider.

Ou si vous utilisez la base de données Berkeley, voici le cahier des charges pour que.

FSFS utilise inverse deltas pour enregistrer les modifications et passez-les deltas pour accélérer certaines actions, si j'ai tout compris correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X