WindowsでShellGeiDataリポジトリをcheckoutする方法
第63回シェル芸勉強会にて、Windows環境でShellGeiDataリポジトリ をチェックアウトできないということが話題になりました。
この記事ではこの問題をどうにかする方法を書きます。
検証した環境
- OS: Windows 10 Home 22H2 19045.2604
- ターミナル: cmd.exe(コマンドプロンプト)
- Gitコマンド: git version 2.39.2.windows.1
チェックアウトできない原因
vol.33/yabai/ ディレクトリ に改行コードのみの名前のヤバいファイルが存在しており、NTFS上でこのファイルを作成できないため。
git clone
や git checkout
したときのエラーメッセージにもファイル名が出力されていた。
error: invalid path ‘vol.33/yabai/
(改行)
(改行)
(改行)
'
※よく見るとちゃんと改行まで含めてクォートされている
対応方針
Gitの「git-sparse-checkout」という機能を使い、上記のファイル(vol.33)を無視して checkout する。
(ファイルシステム上どうしようもないため)
対応手順
以下、全てターミナル(cmd.exe)上での操作です。
エクスプローラーやGUIのGitツールで同様の操作をしてもいいと思います。
1. checkout されていない状態の ShellGeiData リポジトリを用意する
|
|
2. vol.33(と vol.58)ディレクトリを除外する設定を入れる
|
|
※vol.58 はGit LFS
を含んでおり、話がややこしくなるので一緒に除外しています
※インターネットには.git/info/sparse-checkout
を直接編集する例がありますが、Windowsだと改行コードや文字コードで面倒なこともあるためgit sparse-checkout
サブコマンドを使うほうが無難かな~と思います
3. Git の protectNTFS 機能をオフにする
|
|
※「3.」だけやった場合でも、チェックアウトが許可されるだけでファイルが作成されることはなかったです。(チェックアウト後Deleteの差分が出る)
4. master ブランチのデータを取得する
|
|
できました。
vol.33 と vol.58 が除外されています。
参考情報
- 公式情報
- git-sparse-checkout
- git config の core.coreprotectNTFS
- すぐ隣に macOS 用の protectHFS もあった
- 関連するブログや記事