注釈
やりたいことはタイトル通りなのですが書く事柄はgit submoduleです。
探しても探してもプロジェクトの中にプロジェクト入れてそれのサブモジュールどうやってるの?
となり続けて3日ほどかけたので備忘録として。私自身も見返したいですし。
というか実質自分の見返し用です。
これやってー
相手「今あるプロジェクトに機能を追加したいのでよろしくぅ!
あ、ついでに楽に管理したいからサブモジュールとかその辺のなんかいいの使ってね!」
私「(gitを使い始めての1月ぐらいの私に頼むとか正気か…?)わからないことがあったら聞きますね!」
プロジェクト構造どうなってます?
treeコマンドっていうのがあるんですね…
階層手書きしたくないなぁって思ってた私にはまさにありがたみしかないです。
取り敢えずとしてこんな階層のプロジェクトがあったとします。
C:\>tree project /f
C:\PROJECT
│ 1.txt
│ 2.txt
│ 3.txt
│ 4.txt
│ 5.txt
│
└─Patch
├─SubProject
├─SubProject2
├─SubProject3
├─SubProject4
└─SubProject5
このPatch直下にどんどんとサブプロジェクトが増えていくわけです。
今までの管理
そもそも今までの管理方法は?というと
今まではこんな感じでした
C:\>tree project /f
C:\PROJECT
│ 1.txt
│ 2.txt
│ 3.txt
│ 4.txt
│ 5.txt
│ .git
│
└─Patch
├─SubProject
├─SubProject2
├─SubProject3
├─SubProject4
└─SubProject5
大本プロジェクトのみgitで管理している状態です。
パッチ修正とかがあるたびに一気にコミットした瞬間のファイルが増えるし
一部回収なのに大元で管理とかばかばかしいと思いません?
後はほかの人が作ったパッチも入れたい!というとき毎回クローンしなければいけないですし、色々現実的じゃないですよねー…。
というわけでsubmoduleさんの力を借りましょう
まずは、SubProjectを入れたい位置へ行きます。
移動したらサブモジュールとしてプロジェクトを追加します。
C:\>cd Project\Patch
C:\Project\Patch>git submodule add [FILEPATH]
上記でカレントディレクトリにプロジェクトがサブモジュールとして追加されます。
複数ある場合はこのままのカレントディレクトリでgit submodule add
で次々と追加していけます。
ファイル数は一つなんですけども…
今現在追加するサブモジュールが一つの場合わざわざ移動はしなくてもそのまま指定してしまいましょう。
git submodule add [FILEPATH] foo/PluginFolderName
プラグイン名指定なしで階層だけ指定して作りたいんですけど今のところないみたいですのでこのようになります。
C:\Project>git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitmodules
Patch/
nothing added to commit but untracked files present (use "git add" to track)
.gitsubmoduleとPatch/
もしくは
.gitsubmoduleと追加したサブモジュールパス
が
Untracked files:
に存在すればサブモジュールの追加としては終了です。
これでサブモジュールとして管理されるようになったので
プロジェクトの中にプロジェクトに入っていてそれが親プロジェクトで管理されている状態が完成しました!!