kledgeb Ubuntuの使い方や日本語化、アプリの使い方を紹介しています。

Git仮想ファイルシステム

2016年2月3日、「Microsoft」は「Git仮想ファイルシステム(Git Virtual File System)」をアナウンスしました。



「Git仮想ファイルシステム(以下GVFS)」は、Gitリポジトリーをファイルシステムのように扱う仕組みです。

Gitリポジトリー自体階層化されたファイルの集まりなので、リポジトリーをファイルシステムのように見せかけ、Gitでは提供していない仕組みを仮想ファイルシステムを通じてユーザーに提供する手法は、合理的な手法なのでしょう。

今や「Microsoft」では、多くのチームがGitを活用し、またそうでないチームもGitへ移行しつつあります。

350万を超えるファイル数

しかし「Microsoft」のような巨大な企業が管理しているソースコードの量は尋常ではありません。
例えばWindowsのコードベースでは、ファイルの数が350万ファイルを超え、そしてそのコードベースのサイズは270GBを超えます。

270GBを超えるサイズをクローンするとなると、膨大な時間がかかりますね。
話を単純化すれば、「Ubuntu 16.04 日本語Remix」のディスクイメージを225回ダウンロードするようなものです。

Gitクライアントはそのような大量のファイル及び巨大なサイズのリポジトリーを扱うようには設計されていません。

チェックアウトで3時間かかる

このような巨大なリポジトリーでは、チェックアウト(git checkout)だけで3時間かかります。
またgit statusの実行だけでも10分程度時間がかかります。

そしてリポジトリーのクローン(git clone)をしようものなら、12時間以上時間がかかるとのことです。

どのようなサイズのリポジトリーにも適合させるために

「Microsoft」にとって「Git」はお気に入りのツールであり、どのようなサイズのリポジトリーにも適合させるため「Microsoft」は解決策を生み出しました。

それが「GVFS」です。

GVFSの特徴

「GVFS」の特徴です。

ファイルのダウンロードは必要なときだけ行う

「GVFS」では、クライアントのリポジトリーにリモートリポジトリーにあるすべてのファイルがクローンされたかのように現れます。
しかし実際にダウンロードされるファイルは、ユーザーがそのファイルを初めて開いた時です。

sparse-checkoutの管理

Gitがcheckoutやstatusのような操作を確実にそして可能な限り迅速に処理できるよう、Gitのsparse-checkoutを積極的に管理します。

クライアント側のソフトウェアに影響を与えない

「GVFS」はファイルシステムレベルで機能を提供するため、「GVFS」を導入してもクライアント側のソフトウェアに影響を与えず、従来通り透過的にリポジトリーを利用できます。

GVFSで得られた大きな成果

「GVFS」の導入により、以下の大きな成果が得られたとのことです。

項目 GVFS導入前 GVFS導入後
clone 12時間以上 数分
checkout 2-3時間 30秒
status 10分 4-5秒

素晴らしい成果ですね。
さらに時間を削減するため「GVFS」の改良を行っているとのことです。

GVFSはオープンソースで提供

「GVFS」はオープンソースで提供されます。
ソースコードは以下から参照可能です。


ただし今現在「GVFS」はまだ作業中であり、安定版ではありません。
ファイルシステムドライバーはNuGetパッケージとして提供されており、仮想マシンや環境が壊れても問題ないPC上での利用を推奨しています。

ソースコードをざっと見た限り、言語はC#とC++が利用されていますね。

ライセンスはMITライセンス

ライセンスには「MITライセンス」を採用しています。

プロトコル拡張について

「GVFS」で利用するプロトコル拡張については、以下を参照してください。


Git for Windowsの改良

「GVFS」の導入に伴い、「GVFS」との連携の改良を目的とした変更が「Git for Windows」に対し行われました。
「Git for Windows」のソースコードは以下から参照可能です。



関連記事一覧
オプション