Dopo 8 anni di ricerche ho trovato l' SVNFS di Marco R. Gazzetta (che è diverso dal vecchio progetto con lo stesso nome di John Madden [che si fa cose diverse]). Questo SVNFS usa svn in modo trasparente nelle operazioni r / w:
Invece di creare un file system che esegue il proprio versioning, ho usato uno strumento di versioning esistente, sovversione, e ne ho reso trasparente l'uso. Il vantaggio è che questo file system non richiede di apprendere un nuovo strumento, se conosci sovversione
È scritto in Python e usa FUSE:
Ora si avvia il file system di versioning invocando lo script allegato:
python svnfs.py -o svnroot=/home/marco/svnfiles /home/marco/myfiles
Una volta che tutto va bene, dovresti essere in grado di ottenere un elenco di entrambe le directory e vedere che i contenuti sono gli stessi.
Ora, se crei (quasi) qualsiasi file in entrambe le directory, verrà visualizzato anche sull'altro lato del recinto. La grande differenza è che se si crea un file nella directory myfiles, questo verrà automaticamente posto sotto il controllo della versione (non è vero il contrario).
Nell'esempio SVNFS utilizza una directory separata per il repository. Anche se non l'ho provato. Per le mie esigenze, vorrei avere un repository proprio nella mia directory di lavoro.
Ho anche trovato un riferimento alle funzionalità di versioning di Reiser4 4 anni fa:
Vedi Reiser 4. I file sono directory.
per esempio: diff -u main.C main.C/r/123
O per accedere alle proprietà
cat main.C/p/svn-eolstyle
echo "foobar" > main.C/p/my-property
Sembra che sarebbe meglio seguire quel modello, dal momento che un grande filesystem sta già seguendo quella strada.
-Paul Querna
Ma non l'ho controllato anche io.
Due anni fa sono andato a cercare ulteriormente, ho trovato il progetto FiST per la generazione di file system impilabili e ho contattato il prof. Erez Zadok della Stony Brook University, che era consigliere / mentore per il progetto chiamato versionfs molto tempo fa. citando:
http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/
http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf
consente agli utenti di gestire le proprie versioni in modo semplice ed efficiente. Versionfs offre questa funzionalità con un sovraccarico non superiore al 4% per carichi di lavoro tipici simili all'utente. Versionfs consente agli utenti di selezionare sia le versioni da conservare sia il modo in cui vengono archiviate tramite i criteri di conservazione e i criteri di archiviazione, rispettivamente. Gli utenti possono selezionare il compromesso tra spazio e prestazioni che soddisfano al meglio le loro esigenze individuali: copie complete, copie compresse o delta di blocco. Sebbene gli utenti possano controllare le loro versioni, l'amministratore può imporre valori minimi e massimi e fornire agli utenti impostazioni predefinite ragionevoli.
Inoltre, tramite l'uso di libversionfs, le applicazioni non modificate possono esaminare, manipolare e ripristinare le versioni. Gli utenti possono semplicemente eseguire strumenti familiari per accedere alle versioni precedenti dei file, anziché richiedere agli utenti di apprendere comandi separati o chiedere all'amministratore di sistema di reinstallare un file system. Senza libversionfs, le versioni precedenti sono completamente nascoste agli utenti.
Infine, Versionfs va oltre il semplice copy-on-write utilizzato dai sistemi precedenti: implementiamo il copy-on-change. Sebbene all'inizio ci aspettassimo che il confronto tra vecchie e nuove pagine sarebbe troppo costoso, abbiamo scoperto che l'aumento del tempo di sistema è più che compensato dal ridotto tempo di I / O e CPU associato alla scrittura di blocchi invariati. Quando vengono utilizzati criteri di archiviazione più costosi (ad esempio, la compressione), la copia su modifica è ancora più utile.
Mi è sembrato molto interessante, ma contattare i ragazzi che hanno lavorato al progetto ha rivelato che non esiste un luogo noto del suo codice sorgente. Il professore stesso ha dichiarato per posta:
Il codice di Versionfs è molto vecchio ora e ha funzionato solo nel kernel 2.4. Se vuoi ancora un controllo delle versioni impilabile f / s, allora dovresti scriverlo da zero - possibilmente basato su wrapfs (vedi wrapfs.filesystems.org/).
Quindi non esiste un progetto funzionante qui sebbene il concetto di filesystem impilabili mi sembra molto carino. Qualcuno vorrebbe iniziare il progetto basato su wrapfs , avvisami per favore :)