Версионная файловая система — это любая компьютерная файловая система , которая позволяет компьютерному файлу существовать в нескольких версиях одновременно. Таким образом, это форма контроля версий . Наиболее распространенные версионные файловые системы хранят несколько старых копий файла. Некоторые ограничивают количество изменений в минуту или в час, чтобы избежать хранения большого количества тривиальных изменений. Другие вместо этого делают периодические снимки, к содержимому которых можно получить доступ с помощью методов, аналогичных методам для обычного доступа к файлам.
Файловая система с управлением версиями похожа на периодическое резервное копирование , но имеет несколько ключевых отличий.
Версионные файловые системы предоставляют некоторые функции систем контроля версий . Однако, в отличие от большинства систем контроля версий, они прозрачны для пользователей, не требуя отдельного шага «фиксации» для записи новой версии.
Версионные файловые системы не следует путать с журналируемыми файловыми системами . В то время как журналируемые файловые системы работают, сохраняя журнал изменений, внесенных в файл, перед фиксацией этих изменений в этой файловой системе (и перезаписью предыдущей версии), версионная файловая система сохраняет предыдущие копии файла при сохранении новых изменений. Эти две функции служат разным целям и не являются взаимоисключающими.
Некоторые реализации объектного хранилища предлагают управление версиями объектов, например Amazon S3 .
Ранняя реализация управления версиями, возможно, первая, была в ITS Массачусетского технологического института . В ITS имя файла состояло из двух шестисимвольных частей; если вторая часть была числовой (состоящей только из цифр), она рассматривалась как номер версии. При указании файла для открытия для чтения или записи можно было указать вторую часть ">"; при чтении это означало открытие версии файла с самым высоким номером; при записи это означало увеличение на единицу существующего номера версии и создание новой версии для записи.
Еще одна ранняя реализация управления версиями была в TENEX , которая стала TOPS-20 . [1]
Мощный пример системы управления версиями файлов встроен в операционную систему RSX-11 и OpenVMS от Digital Equipment Corporation . По сути, всякий раз, когда приложение открывает файл для записи, файловая система автоматически создает новый экземпляр файла с номером версии, добавленным к имени. Номера версий начинаются с 1 и увеличиваются по мере создания новых экземпляров файла. Когда приложение открывает файл для чтения, оно может либо указать точное имя файла, включая номер версии, либо просто имя файла без номера версии, в этом случае открывается самый последний экземпляр файла. Команда DCL/CCL «purge» может использоваться в любое время для управления количеством версий в определенном каталоге. По умолчанию все версии всех файлов в текущем каталоге, кроме самых высоких, будут удалены; это поведение можно переопределить с помощью переключателя /keep=n и/или путем указания пути(ей) к каталогу и/или шаблонов имен файлов. Системы VMS часто запрограммированы на очистку пользовательских каталогов по регулярному расписанию; Иногда конечные пользователи ошибочно воспринимают это как свойство системы управления версиями.
8 февраля 2004 года Киран-Кумар Мунисвами-Редди, Чарльз П. Райт, Эндрю Химмер и Эрез Задок (все из Университета Стоуни-Брук ) предложили стекируемую файловую систему Versionfs, обеспечивающую уровень управления версиями поверх любых других файловых систем Linux. [3]
Lisp Machine File System поддерживает версионность. Это было реализовано реализациями MIT, LMI, Symbolics и Texas Instruments. Такой операционной системой была Symbolics Genera .
Начиная с Lion (10.7), в macOS появилась функция Versions , которая позволяет сохранять и просматривать прошлые версии документов в стиле Time Machine для приложений, написанных для использования Versions. Однако эта функциональность реализуется на уровне приложения, а не файловой системы; [4] Lion и более поздние версии не включают в себя настоящую файловую систему управления версиями.
HTFS , принятая в качестве основной файловой системы для SCO OpenServer в 1995 году, поддерживает управление версиями файлов. Управление версиями включается для каждого каталога путем установки бита setuid каталога, который наследуется при создании подкаталогов. Если управление версиями включено, новая версия файла создается при удалении файла или каталога или при открытии существующего файла с усечением. Неактуальные версии остаются в пространстве имен файловой системы под именем исходного файла, но с прикрепленным суффиксом, состоящим из точки с запятой и порядкового номера версии. Все версии, кроме текущей, скрыты от чтения каталога (если не установлена переменная окружения SHOWVERSIONS), но версии в остальном доступны для всех обычных операций. Переменная окружения и общая доступность позволяют управлять версиями с помощью обычных утилит файловой системы, хотя также есть команда «undelete», которую можно использовать для очистки и восстановления файлов, включения и отключения управления версиями в каталогах и т. д.
Следующие файловые системы не являются файловыми системами с контролем версий, но предоставляют схожую функциональность.
Git по сути является файловой системой с адресацией по содержимому, поверх которой написан пользовательский интерфейс VCS.