azukipochette's weblog

memory dump (mini)

Git Virtual File System(GVFS) の使い方

GVFS (Git Virtua File System) の使い方を日本語で載せておく。 また、GVFS 利用時の注意点もまとめておく (注意点や制限事項などは 2018/5/28 時点でのもの)。

利用条件

  • 使用 OS が Windows 10 Version 1703 以降であること

GVFS は OS の仕組みを利用しているため、現時点で Windows 10 (Version 1703) 以降でなければ使用できない。

  • Visual Studio Team Services を使用すること

GVFS に対応するためには、使用する Git サービスが GVFS プロトコルに対応している必要がある。現時点では、Microsoft が提供している Visual Studio Team Services (VSTS) のみが対応しており、GitHub などでは利用することができない *1

インストール方法

GVFS を利用するには、マイクロソフトが作成している GVFS対応版の Git for Windows を使用する必要がある。Git 公式 (http://www.git-scm.org) で公開されているものでは使用できないので注意が必要。

GVFS 対応版の Git for Windows は以下の GitHub 上のリポジトリから入手できる。このリポジトリは基本的に Git-for-Windows/Git の fork であり、GVFS 以外についての機能は同じである。

Git for Windows インストール後、GVFS をインストールする。GVFS は以下の GitHub 上のリポジトリからダウンロードできる。

制限事項

現在の GVFS には利用上の制限が 2 つ存在する (正確には 3 つ存在する)

  1. リポジトリで clean/smudge フィルターが有効でないこと
  2. リポジトリの直下 (ルート) に "* text" の行を含む .gitattributes ファイルが存在すること
    • 改行コードの変換が無効であること (* text=false)

特に最後の改行コードについては、Visual Studio によって自動的に作成される .gitattributes ファイルでは "* text=auto" となっており注意が必要である。*2

改行コードの設定が問題で失敗した場合は、以下のエラー コードが表示される。

Error: Could not complete checkout of branch: master, fatal: CRLF conversions not supported when running under GVFS

使い方

Git クローンする時に git clone の代わりに gvfs clone を使えばよい。

実行結果の例を以下に示す。

PS C:\Works\GVFSTest> gvfs clone <Repository Url>
Clone parameters:
  Repo URL: <Repository Url>
  Branch:       Default
  Cache Server: Default
  Local Cache:  C:\.gvfsCache
  Destination:  C:\Works\GVFSTest\MonoBuildTest
Authenticating...Succeeded
Querying remote for config...Succeeded
Using cache server: None (<Repository Url>)
Cloning...Succeeded
Fetching commits and trees from origin (no cache server)...Succeeded
Attaching PrjFlt to volume...Succeeded
Validating repo...Succeeded
Mounting...Succeeded
Registering for automount...Succeeded

取得後は、通常の Git コマンドが使用できる。 なお、git clone した場合は直下にコードリポジトリのソースコードが表示されるが、GVFS の場合は "<root>\src" 配下に作成されるのでコマンド実行時は注意が必要 ("cd <root>\src" すること)。

なお、ローカルからリポジトリを削除したい場合、フォルダーを削除する前にリポジトリ配下で次のコマンドを実行してアンマウントしなければならない。*3

gvfs unmount

macOS と Linux 対応について

macOS と Linux への対応については、Microsoft と GitHub が共同で作業を進めている状況だが、現時点では対応していない。

状況としては、macOS 対応のほうが進んでいる様子。

*1:GitHub、GitBucket ともに対応は計画されているが 2018/5/28 時点では利用できない

*2:text=auto の場合、Git に改行するかどうかをゆだねる形になっており、git 設定で as-is (autoCRLF=false) であれば良いように思うかもしれないが false でなければエラーとなる

*3:消そうとすると Windows にファイルが使用中といわれる