Un file system di controllo delle versioni è un componente software per computer di un file system più grande che conserva i file man mano che vengono modificati in modo che il file possa essere visualizzato o ripristinato a uno stato precedente. In un file system di versioning, qualsiasi file creato avrà tutte le modifiche apportate ai suoi dati archiviati da qualche parte nel file system in modo che i dati del file possano essere ricostruiti per rappresentare il suo stato accurato in qualsiasi momento dalla sua creazione. Sebbene il risultato finale dell’utilizzo del controllo delle versioni in un file system sia simile alla creazione di un backup dei file nel file system, non è considerato lo stesso perché le varie versioni dei file sono archiviate nello stesso file system, di solito nello stesso volume come file in corso di versionamento. I meccanismi utilizzati per implementare un file system di versioning possono variare notevolmente, ma generalmente includono il salvataggio periodico di un intero file per creare una versione o il mantenimento di un registro per ogni file in cui vengono salvate solo le modifiche in modo che il file possa essere ricostruito proceduralmente come necessario. Uno dei vantaggi di un file system con controllo delle versioni quando viene utilizzato in un ambiente di sviluppo o collaborativo è che le modifiche possono essere tracciate e annullate completamente.
L’implementazione di un file system per il controllo delle versioni può variare notevolmente. Alcuni file system implementano il versioning all’interno del proprio framework, ma il versioning viene aggiunto più spesso separatamente, creando quello che è noto come un file system di versioning impilabile, in cui le capacità di versioning funzionano su un altro tipo di file system. Un file system occasionalmente monta un disco logico separato per memorizzare le informazioni sulla versione, mentre altre volte le informazioni vengono scritte su file archiviati nello stesso volume logico dei file di dati effettivi.
A livello di sistema, un file system di controllo delle versioni può adottare diversi approcci per memorizzare le informazioni sulla versione. Un metodo semplice è noto come copia in scrittura, in cui il sistema di controllo delle versioni acquisisce gli eventi di scrittura del file di sistema e crea una copia del file per preservare la versione precedente. Questo è efficace ma può utilizzare una grande quantità di spazio di archiviazione nel tempo.
Un altro modo per implementare il controllo delle versioni all’interno di un file system consiste nel tenere traccia delle modifiche a un file memorizzando solo le modifiche. Questo metodo crea essenzialmente un registro che mostra solo quali informazioni sono state aggiunte, modificate o eliminate da un file. Solo la registrazione delle modifiche può essere molto efficiente dal punto di vista dell’archiviazione, ma richiede potenza di elaborazione per riassemblare un file eseguendo sostanzialmente tutte le modifiche apportate per arrivare allo snapshot richiesto dall’utente.
Un file system di controllo delle versioni è particolarmente utile in un ambiente di sviluppo collaborativo. Per lo sviluppo del software, può essere un modo prezioso per rimuovere o ripristinare le modifiche quando si verificano problemi dopo un aggiornamento. Altri ambienti collaborativi potrebbero consentire a più utenti di modificare i documenti, quindi il controllo delle versioni può consentire il ripristino parziale di un documento se è necessario rimuovere diverse modifiche. Nell’amministrazione della rete, il controllo delle versioni aiuta a mitigare i danni a lungo termine causati da software dannoso o hacker che potrebbero tentare di vandalizzare i file in modo subdolo.