Linux での利用を前提としたリポジトリには、ファイル名に Windows の禁則文字が含まれている場合があります。1 しかし、Git for Windows ではファイル名に禁則文字を含むリポジトリを Clone できません。2 とはいえ、禁則文字を含まないファイルまで Clone できないのでは不便です。どうにかできないものか。
「まばらに」 Clone して問題を回避する
protectNTFS をオフにした状態で、sparse-checkout を活用すれば無事に Clone できます。
# 空のリポジトリを作成する
mkdir <リポジトリ名>
Set-Location <リポジトリ名>
git init
git remote add origin <リポジトリのURL>
# 禁則文字を含むファイルをチェックアウトするとエラーになる機能を無効化
git config core.protectNTFS false
# sparse-checkout を有効化
git config core.sparsecheckout true
# .git\info\sparse-checkout にクローン対象とするパスを記述する
# このとき、エンコードが UTF-8(BOMなし)であることに注意する
[System.IO.File]::WriteAllLines("${PWD}\.git\info\sparse-checkout", @("クローン対象1";"クローン対象2";...), (New-Object "System.Text.UTF8Encoding" -ArgumentList $false))
# 「まばらに」 Clone
git pull origin master
protectNTFS が有効な状態では、sparse-checkout でクローン対象とするパスを限定しても、 禁則文字を含むファイルがあると問答無用でエラーになってしまいます。なお、protectNTFS は Git for Windows 2.25.0 から含まれており、以前のバージョンでは sparse-checkout するだけで問題を回避できていました。
参考リンク
- Git for Windows now fails as expected when trying to check out files with illegal characters in their file names.
- git sparse checkout で clone せずに一部のサブディレクトリだけを pull/checkout する
- Git pullエラー:ファイルを作成できません(無効な引数)
- Partial Clone