Counts the Clouds

サブモジュールを持つGitプロジェクトのセットアップ
2022.06.21

Git

usgs-PuLsDCBbyBM-unsplash.jpg

既存のリポジトリを追加したり、途中でサブモジュールに切り分けるのではなく、最初から子プロジェクトを切り分けて進めたいパターン。

子ディレクトリで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プロジェクトをセットアップすることができた。