git sparse-checkout
何をするものか
作業ツリーに出すファイルを、リポジトリ全体ではなく一部に絞るための機能。
- cone モード
ディレクトリを指定して、その配下を含めるモード - no-cone モード
gitignore 風パターンで細かく指定するモード- 一部だけ含めたい場合にも使える
- 一部を除外したい場合にも使える
通常は cone モードが基本。 ディレクトリ単位で十分なら、こちらのほうが単純で高速。
例
動機
以下の動機で no-cone モードを使う例を記載する。
- Mac で日本語ファイル名を Git に登録すると Windows でチェックアウト時に不整合が起きやすい (特に半濁音のNFC/NFD差)
core.precomposeUnicode設定などで変換する手もあるみたいだが、試して検証するのも気が向かない- そこで、Windows 側で日本語ファイル名を使うのをあきらめて、チェックアウト時は 日本語ファイルが入りうるフォルダは作業ツリーに出さないようにしたい
ちなみに Windows でファイル名に使えない文字( | など )はまた別問題で、この方法では解消しない。
このケースは、あきらめて Mac 側で rename してしまうのが良い。
( 「対象を選択」ではなく、「いったんenv全部を対象にしてから除外」という方式でやっているためか?は不明 )
手順
1. まず --no-checkout で clone する
ps1
git clone <repo-url> --no-checkout
→ この時点では、作業ツリーにファイルは展開されていない
2. --no-cone モードで sparse-checkout する
ps1
@'
/*
!/docs/zatta/
!/_*/
'@ | git sparse-checkout set --no-cone --stdin
これは複数行コメントに見えるかもしれないが、
- 1行目 : まず全部含める
- 2行目 : 除外フォルダパターン1
- 3行目 : 除外フォルダパターン2
と書いているだけ
→ 作業ツリーに、指定したパターンのフォルダ/ファイルのみ展開される
あとはいつも通りの git 操作
以下広告