Après 8 ans de recherche, j'ai trouvé le SVNFS de Marco R. Gazzetta (qui est différent d'un projet plus ancien du même nom par John Madden [dont on fait des choses différentes]). Ce SVNFS utilise svn de manière transparente dans les opérations r / w:
Au lieu de créer un système de fichiers qui fait son propre versioning, j'ai utilisé un outil de versioning existant, subversion, et rendu son utilisation transparente. L'avantage est que ce système de fichiers ne vous oblige pas à apprendre un nouvel outil, si vous connaissez la subversion
Il est écrit en Python et utilise FUSE:
Vous démarrez maintenant le système de fichiers de version en appelant le script joint:
python svnfs.py -o svnroot=/home/marco/svnfiles /home/marco/myfiles
Une fois que tout va bien, vous devriez pouvoir obtenir une liste des deux répertoires et voir que le contenu est le même.
Maintenant, si vous créez (presque) n'importe quel fichier dans l'un ou l'autre répertoire, il s'affichera également de l'autre côté de la clôture. La grande différence est que si vous créez un fichier dans le répertoire myfiles, il sera automatiquement placé sous contrôle de version (l'inverse n'est pas vrai).
Dans l'exemple, SVNFS utilise un répertoire séparé pour le dépôt. Bien que je ne l'ai pas testé. Pour mes besoins, j'aimerais avoir un référentiel directement dans mon répertoire de travail.
J'ai également trouvé une référence aux capacités de versioning de Reiser4 il y a 4 ans:
Voir Reiser 4. Les fichiers sont des répertoires.
par exemple: diff -u main.C main.C/r/123
Ou pour accéder aux propriétés
cat main.C/p/svn-eolstyle
echo "foobar" > main.C/p/my-property
Il semble qu'il serait préférable de suivre ce modèle, car un système de fichiers majeur suit déjà cette voie.
-Paul Querna
Mais je ne l'ai pas vérifié aussi.
Il y a deux ans, je suis allé chercher plus loin, j'ai trouvé le projet FiST pour générer des systèmes de fichiers empilables et j'ai contacté le prof. Erez Zadok de l' Université de Stony Brook, qui était conseiller / mentor pour le projet appelé versionfs il y a longtemps. Citant:
http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/
http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf
permet aux utilisateurs de gérer leurs propres versions facilement et efficacement. Versionfs fournit cette fonctionnalité avec pas plus de 4% de surcharge pour les charges de travail typiques de type utilisateur. Versionfs permet aux utilisateurs de sélectionner à la fois quelles versions sont conservées et comment elles sont stockées via des politiques de rétention et des politiques de stockage, respectivement. Les utilisateurs peuvent sélectionner le compromis entre espace et performances qui répond le mieux à leurs besoins individuels: copies complètes, copies compressées ou deltas de bloc. Bien que les utilisateurs puissent contrôler leurs versions, l'administrateur peut appliquer des valeurs minimales et maximales et fournir aux utilisateurs des valeurs par défaut raisonnables.
De plus, grâce à l'utilisation de libversionfs, les applications non modifiées peuvent examiner, manipuler et récupérer des versions. Les utilisateurs peuvent simplement exécuter des outils familiers pour accéder aux versions de fichiers précédentes, plutôt que d'exiger des utilisateurs qu'ils apprennent des commandes distinctes, ou demander à l'administrateur système de remonter un système de fichiers. Sans libversionfs, les versions précédentes sont complètement cachées aux utilisateurs.
Enfin, Versionfs va au-delà de la simple copie sur écriture utilisée par les systèmes précédents: nous implémentons la copie sur changement. Bien qu'au départ, nous pensions que la comparaison entre les anciennes et les nouvelles pages serait trop coûteuse, nous avons constaté que l'augmentation du temps système était plus que compensée par la réduction des E / S et du temps CPU associés à l'écriture de blocs inchangés. Lorsque des politiques de stockage plus coûteuses sont utilisées (par exemple, la compression), la copie sur modification est encore plus utile.
Cela m'a semblé très intéressant, mais contacter les gars qui ont travaillé sur le projet a révélé que le code source n'est pas connu. Le professeur lui-même a déclaré par courrier:
Le code de Versionfs est maintenant très ancien et ne fonctionnait que dans le noyau 2.4. Si vous voulez toujours un versioning empilable f / s, alors il faudrait l'écrire à partir de zéro - éventuellement basé sur wrapfs (voir wrapfs.filesystems.org/).
Il n'y a donc pas de projet de travail ici bien que le concept de systèmes de fichiers empilables me semble très agréable. Quelqu'un souhaite-t-il démarrer un projet basé sur des enveloppes , informez-moi s'il vous plaît :)