バージョン管理システムとは、 コンピュータファイルが 複数のバージョンで同時に存在できるコンピュータファイルシステムのことです。つまり、一種のバージョン管理と言えます。一般的 な バージョン管理システムの多くは、ファイルの古いコピーを複数保持します。中には、些細な変更が大量に保存されるのを避けるため、1分または1時間あたりの変更回数を制限するものもあります。また、通常のファイルアクセスと同様の方法で内容にアクセスできるスナップショットを定期的に取得するものもあります。
類似の技術
バックアップ バージョン管理ファイルシステムは、定期的なバックアップ に似ていますが、いくつかの重要な違いがあります。
バックアップは通常、一定時間間隔で実行されますが、バージョン管理はファイルが変更されたときに行われます。 バックアップは通常、システム全体またはパーティション全体で行われますが、バージョン管理はファイルごとに個別に行われます。 バックアップは通常、別のメディアに書き込まれますが、バージョン管理システムは同じハードドライブ(通常は同じフォルダ、ディレクトリ、またはローカルパーティション)に書き込みます。
改訂管理システムと比較して バージョン管理システムは、リビジョン管理システム の一部の機能を提供します。しかし、ほとんどのリビジョン管理システムとは異なり、ユーザーにとって透過的であり、新しいリビジョンを記録するための「コミット」手順を別途行う必要はありません。
ジャーナリングファイルシステム バージョン管理システムとジャーナリング管理システム は混同してはいけません。ジャーナリング管理システムは、 ファイルに加えられた変更をファイルシステムにコミット(そして以前のバージョンを上書き)する前にログとして記録するのに対し、バージョン管理システムは、新しい変更を保存する際にファイルの以前のコピーを保持します。これら2つの機能は異なる目的を持ち、互いに排他的なものではありません。
実装
その バージョン管理の初期の実装例(おそらく最初のもの)は、MITのITS にありました。ITSでは、ファイル名は6文字の2つの部分で構成されていました。2番目の部分が数字(数字のみで構成されている)の場合、それはバージョン番号として扱われました。読み取りまたは書き込み用にファイルを開く場合、2番目の部分に「">"」を指定することができました。読み取りの場合は、ファイルの最も番号の大きいバージョンを開くことを意味し、書き込みの場合は、既存の最も番号の大きいバージョンをインクリメントして、書き込み用の新しいバージョンを作成することを意味しました。
バージョン管理の初期の実装としては、 TOPS-20 となったTENEX が挙げられる。[ 1 ]
Files-11 (RSX-11およびOpenVMS)ファイルのバージョン管理システムの強力な例として、Digital Equipment Corporationの RSX-11 およびOpenVMS オペレーティングシステムが挙げられます。基本的に、アプリケーションが書き込み用にファイルを開くと、ファイルシステムは自動的にファイルの新しいインスタンスを作成し、ファイル名にバージョン番号を付加します。バージョン番号は1から始まり、ファイルの新しいインスタンスが作成されるたびに増加します。アプリケーションが読み取り用にファイルを開く場合、バージョン番号を含む正確なファイル名を指定するか、バージョン番号を含まないファイル名のみを指定できます。後者の場合、ファイルの最新のインスタンスが開かれます。「purge」DCL/CCL コマンドは、いつでも特定のディレクトリ内のバージョン数を管理するために使用できます。デフォルトでは、現在のディレクトリ内のすべてのファイルのうち、最も番号の大きいバージョンを除くすべてのバージョンが削除されます。この動作は、/keep=nスイッチを使用するか、ディレクトリパスやファイル名のパターンを指定することで上書きできます。VMSシステムでは、ユーザーディレクトリを定期的にパージするようにスクリプト化されていることがよくあります。これは、エンドユーザーによってバージョン管理システムの特性と誤解されることがあります。
Linux NILFS – ファイルシステム全体のバージョン管理と継続的なスナップショットをサポートするログ構造ファイルシステム。このリストの中で、安定版であり、メインラインカーネルに組み込まれているのはNILFSのみです。Tux3 – 最新の変更は2014年に行われました。[ 2 ] Next3 – 最新のアップデートは2012年に行われました。ext3cow – 最新のリリースは2005年です。 2004年2月8日、Kiran-Kumar Muniswamy-Reddy、Charles P. Wright、Andrew Himmer、およびErez Zadok(いずれもストーニーブルック大学 所属)は、他のLinuxファイルシステムの上にバージョン管理レイヤーを提供するスタック可能なファイルシステムVersionfsを提案した。[ 3 ]
LMFS Lispマシンファイルシステムはバージョン管理をサポートしていました。これはMIT、LMI、Symbolics、Texas Instrumentsの実装によって提供されていました。そのようなオペレーティングシステムの一つがSymbolics Genera です。
macOS Lion (10.7) 以降、 macOS には Versions と呼ばれる機能があり、Versions を使用するように作成されたアプリケーションで、 Time Machine のようにドキュメントの過去のバージョンを保存および参照できます。ただし、この機能はファイルシステム層ではなくアプリケーション層で行われます。[ 4 ] Lion 以降のリリースには、真のバージョン管理システムは組み込まれていません。
SCO OpenServer 1995年にSCO OpenServer の主要ファイルシステムとして採用されたHTFSは 、ファイルバージョニングをサポートしています。バージョニングは、ディレクトリのsetuidビットを設定することでディレクトリごとに有効になり、サブディレクトリが作成されると継承されます。バージョニングが有効になっている場合、ファイルまたはディレクトリが削除されたとき、あるいは既存のファイルが切り捨てで開かれたときに、新しいファイルバージョンが作成されます。現在のバージョン以外のバージョンは、ファイルシステムの名前空間に、元のファイル名にセミコロンとバージョンシーケンス番号からなるサフィックスが付加された名前で残ります。現在のバージョン以外のすべてのバージョンは、ディレクトリの読み取りから隠されます(SHOWVERSIONS環境変数が設定されている場合を除く)。ただし、それ以外の場合は、すべての通常の操作でバージョンにアクセスできます。環境変数と一般的なアクセス権限により、通常のファイルシステムユーティリティを使用してバージョンを管理できますが、ファイルの削除と復元、ディレクトリのバージョニングの有効化と無効化などに使用できる「undelete」コマンドもあります。
その他 Subversionに は「自動バージョン管理」と呼ばれる機能があり、 Subversionバックエンドを持つWebDAV ソースを、この種のマウントをサポートするシステム(Linux、Windowsなど)にファイルシステムとしてマウントすることができ、そのファイルシステムへの保存によってリビジョン管理システムに新しいリビジョンが生成されます。[ 5 ] 商用構成管理およびリビジョン管理ソフトウェアであるClearcaseは、1990年代初頭からHP-UX、AIX、Windows上で「MVFS」(マルチバージョンファイルシステム)をサポートしてきた。
以下はバージョン管理システムではありませんが、同様の機能を提供します。
APFS [ 6 ] とZFS は 、瞬時のスナップショットとクローンをサポートしています。Btrfsは スナップショットをサポートしています。[ 7 ] DragonFlyBSDのHAMMER には、ファイルシステムにリビジョンを保存する機能があります。スナップショット をサポートするNILFS 。Plan 9 のFossil ファイルシステムも同様の機能を提供しており、定期的に(多くの場合1時間ごとに)スナップショットを作成し、/n/snapで利用できるようにします。Fossilはスナップショットを Venti に永久的にアーカイブし(通常は1日に1回)、 /n/dump で利用できるようにします。スナップショット間の間隔でファイルに複数の変更が加えられた場合、次のスナップショットには最新の変更のみが記録されます。Write Anywhere File Layout - NetApp のストレージ ソリューションは、WAFL と呼ばれるファイルシステムを実装しており、スナップショット テクノロジーを使用してボリューム内のすべてのファイルの異なるバージョンを保持します。高林悟氏が作成したpdumpfsは、Plan 9の/n/dumpに似たシンプルな日次バックアップシステムで、Ruby で実装されています。スナップショットツールとして機能し、ハードリンクを使用してディレクトリ全体を別の場所にコピーできます。定期的に使用することで、バージョン管理に似た効果が得られます。[ 8 ] マイクロソフトWindows シャドウコピー は、MicrosoftがWindows Server 2003で導入した機能です。シャドウコピーを 使用すると、特定のボリューム上のファイルまたはフォルダーの、特定の時点におけるバックアップコピーまたはスナップショットを、手動または自動で作成できます。RollBack Rx - ディスクパーティションのスナップショットを作成できます。各スナップショットには以前のスナップショットとの差分のみが含まれ、作成にはわずか数秒しかかかりません。Windows OSの安定性を維持したり、マルウェアから保護したりするために、確実に使用できます。 GoBack (販売終了) - Symantec 社のWindows用ソフトウェアGoBackは、ファイル、ディレクトリ、ディスクを以前の状態に戻すことができます。最大8GBの変更内容を記録でき、 I/Oアクティビティが高い場合は、各変更の記録を一時的に停止します。Versomatic - Acertant社 製のVersomaticソフトウェアは、ファイルの変更を自動的に追跡し、ファイルが変更される前にそのコピーを事前にアーカイブします。 Cascade File Systemは、ファイルシステムドライバを介してSubversion またはPerforce リポジトリを公開します。ただし、変更をコミットするタイミングはユーザーが明示的に決定する必要があります。 Gitの 実装に関するドキュメントでは、Gitを「VCSユーザーインターフェースがその上に書かれたコンテンツアドレス指定可能なファイルシステム」と呼んでいます。[ 9 ] また、マウント可能な読み書き可能なバージョン管理システムとしてGitを拡張する可能性のあるサードパーティ製のFUSE実装も存在します。[ 10 ]
参考文献 ↑ Daniel G. Bobrow、Jerry D. Burchfiel、Daniel L. Murphy、Raymond S. Tomlinson、「TENEX、PDP-10 用ページング式タイムシェアリングシステム」 ( Communications of the ACM 、第 15 巻、135-143 ページ、1972 年 3 月) ↑ GitHub の linux-tux3。 ↑ Kiran-Kumar Muniswamy-Reddy; Charles P. Wright; Andrew Himmer; Erez Zadok (2004年2月8日).多用途でユーザー指向のバージョン管理システム . 第3回USENIXファイルおよびストレージ技術会議(FAST 2004)。 ↑ 「Mac OS X Lion ファイルバージョン、パート 2」 。2011 年 8 月 6 日。2012 年 4 月 28 日 に取得 。 ↑ Subversionによるバージョン管理:次世代オープンソースバージョン管理 ↑ 「Appleファイルシステムについて」 。Apple 開発者向けドキュメント 。 2021年6月9日 取得。 ↑ http://www.oracle.com/technetwork/articles/servers-storage-admin/advanced-btrfs-1734952.html「スナップショット、クローン、およびシード デバイス」の「スナップショット」のサブ項目。 ↑ pDumpFS ホームページ [ リンク削除済み] ↑ 「Git の内部構造」 。Git は基本的にコンテンツ アドレス指定可能なファイルシステムであり、その上に VCS ユーザー インターフェイスが記述されています。 ↑ 「Gitfsとは何か」 。Presslabs 。 2015年7月24日。 2022年3月7日 閲覧 。
外部リンク 「ファイルストレージの作成方法」 . WikiHow . 2018年 7月31日 取得 .