TL;DR
サブモジュールを含むリポジトリは単純にgit clone
するだけではサブモジュールはcloneされません。
その時は --recursive
オプションを追加することでまとめてcloneできます。
git clone --recursive https://github.com/hoge/fuga.git
サブモジュールを含むリポジトリ QMK Firmwareを1発でCloneしたい
自作キーボード Helix のFWとしてQMK Firmwareを使っています。
ビルドガイドに従わず手癖でgit cloneをしました。
(ビルドガイドをさらっとしか読んでいなかったので見逃していました)
# ビルドガイドの手順
git clone --recursive https://github.com/qmk/qmk_firmware.git
# 手癖の手順
git clone https://github.com/qmk/qmk_firmware.git
で、ビルドをすると次のようにLUFA/makefileがないとエラーになります。
tmk_core/protocol/lufa.mk:14: lib/lufa/LUFA/makefile: No such file or directory
/bin/sh: avr-gcc: command not found
make[1]: *** No rule to make target `lib/lufa/LUFA/makefile'. Stop.
make: *** [helix:led_test] Error 1
LUFAはサブモジュールなので--recursive
オプションなしだとcloneはされない仕様です。だからビルド時にLUFAがないと怒られたというわけです。
その時は直接LUFAをcloneして該当のディレクトリに配置して無理やりビルドを通しましたが、改めて調べてみるとサブモジュールをまとめてcloneする--recursive
オプションがあることを知りました。
どんなリポジトリでも初回cloneの時は--recursive
必須というやり方をしたらダメなんでですかね。もしくは--initialclone
みたいな初回専用のオプションとかあればわかりやすくていいのかな。