サブモジュールを持つGitプロジェクトのセットアップ 2022.06.21
既存のリポジトリを追加したり、途中でサブモジュールに切り分けるのではなく、最初から子プロジェクトを切り分けて進めたいパターン。
子ディレクトリでGitの初期化をしてコミットまですると親プロジェクトでgit submodule add
できる。
最終的なtree。
% tree -a -I .git .
.
├── .gitmodules
├── <CHILD1>
│ └── .gitignore # ファイルは何でも良い
└── <CHILD2>
└── .gitignore # ファイルは何でも良い
サブモジュール2つの想定で、まずはファイルを準備していく。
% mkdir <ROOT> && cd $_
% git init
% mkdir <CHILD1> && cd $_
% git init
% touch .gitignore # コミットするため何でもいいのでファイルを作成
% git add .
% git commit -m "first commit on <CHILD1>"
% cd ..
% mkdir <CHILD2> && cd $_
% git init
% touch .gitignore # コミットするため何でもいいのでファイルを作成
% git add .
% git commit -m "first commit on <CHILD2>"
% cd ..
プロジェクトルートに戻って、サブモジュールを追加。
% git submodule add ./<CHILD1>
Adding existing repo at <CHILD1> to the index
% git submodule add ./<CHILD2>
Adding existing repo at <CHILD2> to the index
% git commit -m "first commit on root"
<CHILD1>
を変更してみる。
% cd <CHILD1>
% vi .gitignore # 適当に変更
% git add .
% git commit -m "changed"
% cd ..
プロジェクトルートに戻ると差分がでているので、最新のサブモジュールの状態を反映するためコミットする。
% git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: <CHILD1> (new commits)
no changes added to commit (use "git add" and/or "git commit -a")
% git add .
% git commit -m "<CHILD1> changed"
サブモジュールを持つGitプロジェクトをセットアップすることができた。