💭
git submodule の使い方
git で管理してるソースツリーの中に、他の git tree を追加したくなったので調べたメモ。
現状のツリー
tot
└── subarashii_source.c
完成時のツリー
tot
├── hokano_git
│ ├── Makefile
│ ├── tanin_no_source.c
│ └── tanin_no_source.h
└── subarashii_source.c
他のツリー(submodule)の追加
git submodule add <clone url> hokano_git
するだけ。
submodule add すると、以下のファイルが追加されている。
$ git status
ブランチ main
コミット予定の変更点:
(use "git restore --staged <file>..." to unstage)
new file: .gitmodules
new file: hokano_git
これをコミットして完了。submodule の中を更新すると、外では同様に hokano_git がファイル更新されるので、こちらもコミットする。
メインのツリーと submodule がずれたとき
git reset とか git checkout すると、少しおかしなことになる。
そのときは git submodule update
すればよい。
submodule 含めて git archive できない
回避策として git-archive-all
というモジュールがある。実行は git tree 直下で git-archive-all output.tar
のようにする。拡張して出力フォーマットを判断してくれるので、git archive より便利。
submodule 内でコミットされていないファイルがあると・・・
以下のようなメッセージが git status に表示されて、外からは add も何もできないので、submodule 内でコミットしなければならない。
modified: tot/hokano_git (modified content)
Discussion