Submodule Commands
- いろいろある
Why Submodules?
- モジュール化のため
Submodules Preparation
- submodule切り出し対象は大抵すでにディレクトリになっている
-
submoduleを切り出す流れ
-
下位ディレクトリを上位ディレクトリと対等な場所に出す
- 歴史を保持したければ
git filter-branch
を使う
- 歴史を保持したければ
- 切り出したディレクトリを適切な名前にリネーム
-
サブモジュール用の上流リポジトリを用意する
- GitHubとか
- サブモジュールをpushする
- 上位プロジェクトにサブモジュールを追加する
- 上位プロジェクトに.gitmodulesファイルを含めてコミット・pushする
-
Why Read Only?
-
開発活動の分離を強制してくれる
- サブモジュールで独立して開発・テスト・ビルドを行う
- 上位プロジェクトからチェックアウトする
- 回りくどいけれど暗黙的に最新コミットを指してしまうよりもよい
Why Not Read Only?
- 上位プロジェクト内のサブモジュールを直接いじることもできる
- 手っ取り早い
-
ただしリスキー
- サブモジュールのpushを忘れると他の開発者が困る
Examining the Hashes of Submodule Commits
- treeが、treeやblobのようにcommitを指す感じ
Credential Reuse
--recurse-submodules
をつけてcloneすると、サブモジュールにも再帰的に認証情報が適用される
Use Cases
-
書籍のコードサンプルをopen sourceに
- 上位プロジェクトはclosed
- サンプル別にサブモジュールを切りopen sourceにする
-
プラグイン
- 手作業コピペと異なり、歴史の紐付けができる
-
巨大リポジトリ
-
gitが想定しているのはせいぜい1-4GBくらい
- cf. SVNリポジトリは数百GBになったりする
-
-
可視性制御
- 開発者にサブモジュールをcloneさせない
- CIサーバーのSSH鍵でだけサブモジュールをcloneできるようにする
- 顧客に届くビルド成果物は必ずCIサーバでしかビルドできなくする
Multilevel Nesting of Repos
-
--recurse-submodules
オプション- git clone,fetch,pullが対応
-
--recurse
オプション- submodule status, update, for each
Submodules on the Horizen
- GUIのサポートなどが拡充してきている
英語
-
fault lines
- 断層
-
lament
- 嘆き悲しむ