やる気がストロングZERO

やる気のストロングスタイル

git submodule覚書

参考)
Git - サブモジュール

gitリポジトリをネストしたい場合がある。

プログラム作成中に汎用的なclassを作ったとき、githubに公開したいけど、メインのコードは公開したくない時。
もしくは、プログラム作成中にgithubで公開されているコードを使いたいけど、のちのち変更を取り込んだりしたいからgit管理しつつ(ただし、作成中プログラムのgitとして管理したいわけじゃない)コードに盛り込みたい時。

こんなときはgit submoduleを使うらしい。
※ただし、git監理が結構複雑になるのでなにか別の方法があればそうしたい気もする。
だいぶ慣れないと「gitで変更前に戻したのに実行時エラーになる!」みたいなことになって混乱しそう。

メインgitリポジトリへ、submoduleリポジトリの導入

(submoduleリポジトリを配置するディレクトリへ移動して)

git submodule add [リポジトリurl]
git commit(メインgitリポジトリへ「submoduleが追加された」というコミットを打つ)

既存gitリポジトリのブランチ切り替え

git checkout [特定のコミット]
git submodule update(updateをして初めてsubmoduleリポジトリが正しい状態へとcheckoutされる)

submoduleリポジトリの更新時

(submoduleのディレクトリへ移動して)
remoteの変更を取り込むなら

git pull 

もしくは 自分で変更したなら

git add
git commit 

(submoduleのディレクトリから出て)

git add
git commit(「submoduleが変更された」ということをcommitする)

submoduleリポジトリが入っているgitリポジトリをcloneするとき

git clone [リポジトリurl]
git submodule init
git submodule update

もしくは下記ならupdateまでやってくれる。

git clone --recursive [リポジトリurl]