Después de 8 años de búsqueda , encontré el SVNFS de Marco R. Gazzetta (que es diferente del proyecto anterior con el mismo nombre de John Madden [que hace cosas diferentes]). Este SVNFS usa svn de forma transparente en las operaciones de r / w:
En lugar de crear un sistema de archivos que haga su propio control de versiones, utilicé una herramienta de control de versiones existente, subversión, e hice su uso transparente. La ventaja es que este sistema de archivos no requiere que aprenda una nueva herramienta, si conoce la subversión
Está escrito en Python y usa FUSE:
Ahora inicia el sistema de archivos de versiones invocando el script adjunto:
python svnfs.py -o svnroot=/home/marco/svnfiles /home/marco/myfiles
Una vez que todo esté bien, debería poder obtener una lista de ambos directorios y ver que el contenido es el mismo.
Ahora, si crea (casi) cualquier archivo en cualquiera de los directorios, también se mostrará en el otro lado de la cerca. La gran diferencia es que si crea un archivo en el directorio myfiles, se colocará automáticamente bajo el control de la versión (lo contrario no es cierto).
En el ejemplo, SVNFS usa un directorio separado para el repositorio. Aunque no lo he probado. Para mis necesidades, me gustaría tener un repositorio en mi directorio de trabajo.
También encontré referencia a las capacidades de versiones de Reiser4 hace 4 años:
Ver Reiser 4. Los archivos son directorios.
p.ej: diff -u main.C main.C/r/123
O para acceder a propiedades
cat main.C/p/svn-eolstyle
echo "foobar" > main.C/p/my-property
Parece que sería mejor seguir ese modelo, ya que un sistema de archivos importante ya está yendo por esa ruta.
-Paul Querna
Pero tampoco lo he comprobado.
Hace dos años fui a buscar más, encontré el proyecto FiST para generar sistemas de archivos apilables y contacté al profesor. Erez Zadok, de la Universidad Stony Brook, quien fue asesor / mentor para el proyecto llamado versionfs hace mucho tiempo. Citando:
http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/
http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf
permite a los usuarios administrar sus propias versiones de manera fácil y eficiente. Versionfs proporciona esta funcionalidad con no más del 4% de sobrecarga para cargas de trabajo típicas de usuario. Versionfs permite a los usuarios seleccionar qué versiones se mantienen y cómo se almacenan a través de políticas de retención y políticas de almacenamiento, respectivamente. Los usuarios pueden seleccionar la compensación entre espacio y rendimiento que mejor satisfaga sus necesidades individuales: copias completas, copias comprimidas o deltas de bloque. Aunque los usuarios pueden controlar sus versiones, el administrador puede imponer valores mínimos y máximos, y proporcionar a los usuarios valores predeterminados razonables.
Además, mediante el uso de libversionfs, las aplicaciones no modificadas pueden examinar, manipular y recuperar versiones. Los usuarios simplemente pueden ejecutar herramientas conocidas para acceder a versiones de archivos anteriores, en lugar de exigirles a los usuarios que aprendan comandos separados, o solicitar al administrador del sistema que vuelva a montar un sistema de archivos. Sin libversionfs, las versiones anteriores están completamente ocultas para los usuarios.
Finalmente, Versionfs va más allá de la simple copia en escritura empleada por sistemas anteriores: implementamos copia en cambio. Aunque al principio esperábamos que la comparación entre páginas antiguas y nuevas sería demasiado costosa, descubrimos que el aumento en el tiempo del sistema está más que compensado por la reducción de E / S y el tiempo de CPU asociado con la escritura de bloques sin cambios. Cuando se utilizan políticas de almacenamiento más caras (p. Ej., Compresión), la copia en cambio es aún más útil.
Me pareció muy interesante, pero contactar a los chicos que trabajaron en el proyecto reveló que no hay un lugar conocido de su código fuente. El propio profesor declaró por correo:
El código de Versionfs es muy antiguo ahora, y solo funcionó en el kernel 2.4. Si aún desea un versionado apilable f / s, entonces uno tendría que escribirlo desde cero, posiblemente basado en wrapfs (consulte wrapfs.filesystems.org/).
Por lo tanto, no hay ningún proyecto que funcione aquí, aunque el concepto de sistemas de archivos apilables me parece muy agradable. ¿Alguien quiere comenzar un proyecto basado en f wrapfs , notifíqueme por favor :)