
gitの弱点をMicrosoftが克服?
SCD所属、新入社員の新宅です。
今回もWindows 10のネタを…と思ったのですが、それは次回以降に投稿することにしました。
(Windows 10の次回投稿ネタはもう決まっていたりします。)
今回のネタは?
今回はGVFSというもののお話です。
GVFSとはGit Virtual File Systemの略で、Microsoftがgitの弱点を克服するために作ったものです。
What’s GVFS?
通常のgitはCloneした時を含め、常に全ての履歴とデータを保持します。そのため、gitは小規模な開発ワークロードに最適化されています。
100GB単位の極端に大規模なものをgitで扱うと、clone(ローカルにコピー)した時に数時間かかったり、commit(履歴保存)をした時に数十分かかったり、statusを見るだけでも数分かかったりしてしまいます。
Microsoftには、Windowsなど大規模な開発ワークロードが多数存在しており、gitを導入した際の障壁となったようです。そこで、gitの時間が掛かりすぎるという弱点を埋めるための、差分Cloneの仕組みをgitに導入しました。それがGVFSです。
GVFSの利用条件と入手について
GVFSを利用するためには以下の条件が必要です。
- gitを扱えるスキルがあること
- Visual Studio 2017 Community以上をインストールし、ビルド出来る知識があること
- 64bit版のWindows 10 Creators Update または 最新のInsider Buildを利用していること(執筆時点)
- 管理者権限を利用できること
- リモートリポジトリがVisual Studio Team Servicesであること
こちらから入手することが可能です。https://github.com/Microsoft/GVFS
GVFSを利用開始するまでの手順
大体のことは、上記入手リンクの下部のReadme.mdに記述されていますので、そちらも御覧ください。
Visual Studio 2017のインストール
https://www.visualstudio.com/ja/downloads/
こちらなどから、Visual Studio 2017 Community以上をインストールしてください。Communityは個人向けです。法人向けに利用される場合はProfessional以上のライセンスが必要です。
インストールする際に、インストールするコンポーネントを選択する画面が表示されますので、[個別のコンポーネント]タブをクリックします。
以下のコンポーネントにチェックを入れ、インストールを完了させます。
- .Net Framework 3.5 開発ツール
- C++/CLI サポート
- VC++ 2015.3 v140 ツールセット(x86,x64)
- Windows 10 SDK(10.0.10240.0)
InnoSetupとgitのインストール
http://www.jrsoftware.org/isdl.php
innosetup-x.x.x.exe(執筆時点ではinnosetup-5.5.9.exe)の最新版のDownload Sitesのリンクから適当にDLし、通常設定のままインストールします。
https://github.com/Microsoft/git/releases
また、こちらからGit-x.xx.x.gvfs.x.preview.x-64-bit.exeの最新版をDLし、インストールします。
GVFSソースの取得
GVFSのソースをgithubからローカルにCloneします。
コマンドプロンプトを開き、以下のコマンドを順番に入力します。
- cd c:\
- mkdir Repos\GVFS\src
- cd Repos\GVFS\src
- git clone https://github.com/Microsoft/GVFS.git
取得出来ましたら、gvlib.hを内容を変更せずにUTF-16(BOM無し)で上書き保存します。英語以外のロケール設定のWindows上でビルド出来ない問題が報告されていますが、暫定的にこの解決策で対処可能です。
GVFSのビルド
c:\Repos\GVFS\src\GVFS.sinをVisual Studio 2017で開き、そのままビルドします。
ビルドがエラーになるときのチェックリスト
- gvlib.hをUTF-16(BOM無し)で保存し直していますか?
- Visual Studioの別バージョンが同時にインストールされている環境では正しくビルド出来ないことがあります。一度全てVisual Studioをアンインストールし、2017のみを再インストールしてテストしてください。
GVFSのインストール
C:\Repos\GVFS\src\BuildOutput\GVFS\bin\x64\Debug\Setup
またはC:\Repos\GVFS\src\BuildOutput\GVFS\bin\x64\Release\Setup
上記フォルダパスに存在するSetupGVFS.exeを起動し、GVFSをインストールします。
リポジトリの準備
https://www.visualstudio.com/team-services/
もし既存のgitリポジトリをお持ちで、そのリポジトリでお試しする場合は、一度Visual Studio Team Services(MSアカウント認証で無料です)でリポジトリを作成し、そこにpushし直してください。GVFSのメリットを体感するためには、可能な限り大きいリポジトリでテストすることを推奨します。
- git remote add vs [repo URL]
- git push vs
次に、Visual Studio Team Services上で、pushしたリポジトリのルートに「.gitattributes」ファイルを作成し、「* -text」と記述してcommit(保存)します。
GVFSによるClone
管理者権限のコマンドプロンプトで実行する必要があります。
通常は「git clone [repo URL]」ですが、GVFSの場合は[gvfs clone [repo URL]]です。
また、通常のgit cloneと違い、リポジトリの中身はカレントディレクトリではなく、その配下のsrcフォルダーにCloneされます。更に、一度にClone時にまとめて取得するのではなく、GVFSでは順次必要な時に取得される点も異なります。
2度目以降の利用開始と終了
管理者権限のコマンドプロンプトで実行する必要があります。
Cloneした時にGVFSによってマウントされています。利用終了後にはアンマウントすることが必要です。これを行わないと、使用状態がGVFSによってロックされ、そのリポジトリのフォルダの全体削除など、一部操作が行えなくなります。
- gvfs unmount
また、一度アンマウントしたリポジトリをもう一度利用したいときには、再度マウントする必要があります。
- gvfs mount
GVFSの使用感など
正直、GVFSのメリットを見出すレベルの開発ワークロードとなると、極端に長い歴史を持ち、更にコードが膨大な場合くらいです。初めにも記述した通り、100GB単位のリポジトリで初めて恩恵を受けるシステムです。
Railsの簡単な100MB程度のリポジトリで試行したところ、通常gitのほうが却って高速でした。
また、Lineage OSという有志によるAndroidのカスタムROMに含まれる「設定」アプリのリポジトリは800MB程度で、このくらいになると数分程度CloneがGVFSのほうが高速でしたが、その他のcommitなどはどちらもあまり変わりませんでした。
リポジトリ全体のフォルダーのサイズはGVFSのほうがずっと小さく、エクスプローラーなどが初めてファイルを参照した時に、順次ダウンロードされるようです。
毎回管理者権限でマウント・アンマウントをする手間も煩わしく、まだ実際の開発に使えるものではないと私は判断しました。
GVFSはとある新機能の土台となる?
GVFSはgitのための技術ではありますが、Microsoftの技術者向け発表会「Build 2017」で発表されたとある新機能と共通点があるのです。
それは、次期Windows 10でのOneDriveのプレースホルダー機能の復活です。元々Windows 8.xの頃にもあった機能ですが、こちらは動作がいまいちで、Windows 10の初期バージョンで削除されてしまいました。しかし、タブレット等容量が少ないPCで使いたいという要望も多く、ついに先日Insider向けに復活を遂げました。
この技術の根底にはGVFSが潜んでいそうだと私は思っています。
一応、GVFSはまだ開発プレビュー中のため、今後更に使いやすくなる改善があるかもしれません。