はじめに
- git lfs 化したリポジトリを複数人で運用している場合の話です。
- 既存のリポジトリを lfs 化したにせよ、新規に構築したにせよ起こり得ます。
- タイトルが長い!というツッコミは甘んじて受け入れますw
TL; DR
git lfs clone
しましょう。git clone
済の場合はgit lfs install
で解決します。
課題
Encountered N file(s) that should have been pointers, but weren't: // 以下ファイル名...
- 複数人 (じゃなくても起こせるけど) で git lfs リポジトリを運用していると上記のようなメッセージに遭遇することがあります。
- N は1以上の自然数です。
git reset --hard
とかしても消えてくれません。git status
でずっと怒られた状態になります。困った!
原因
- じゃあ、なんでそんなことになるのか?
- 凄く端的に言えば git lfs さんが「ポインタ化すべきファイルあるっぽいけど?」って教えてくれているわけです。
- これの根本原因は、当該リポジトリにコントリビュートしている人の誰かの環境が git lfs 化されていないからです。
- 「え?ちゃんと
git lfs add
とかもして、.gitattributes
もコミットしたんだけど!?」とか思うんですが、あくまでそれはポインタ化の対象ファイルを列挙したに過ぎず、git lfs のフックを全環境に配信したわけではないのです。
解決策
- まだ git clone していない環境の場合は
git lfs clone
しましょう! - 既に git clone でローカルリポジトリ作っちゃった場合は、
git lfs install
コマンドで hook スクリプトがインストールされます。- インストール時のオプションも幾つかあるっぽいけど、調べてない。
*1:git checkout と同時に1件ずつ取得するのでは無く、並列ダウンロードしてくれるので10倍くらい速い。