Git SubmoduleのトラブルをGit Subtreeで解決できると知っていますか?
ライブラリやフレームワークなど、外部のリポジトリで管理されているソースコードをプロジェクトに取り込む際によく使われているgit submodule
を使わないほうが良いという論争が起こっています。それを受けてgit subtree
を使うべきであるというエントリがAtlassianのNicola Paolucci氏がブログに投稿しています。彼はまずgit submoduleを使うべきではないという話題が盛り上がっているという事で3つの記事を参照したあとに、git subtreeを使うべき理由と使用例を挙げています。それによるとgit subtreeを使うべき理由は以下のとおり。
- ワークフローがシンプルなので管理が簡単。
- 古いバージョンのgitもサポートしている。(v1.5.2ですら。)
- サブプロジェクトのコードがcloneした直後に利用できる。
- subtreeはユーザに新しい学習を要求しない。subtreeを依存性の解決に使っていることは無視する事ができる。
- subtreeは新しいメタデータファイルを追加しない。例えばsubmodules が追加する.gitmoduleのようなファイル。
- モジュールの内容を別のリポジトリのコピーなどを他所に持たなくても編集できる。
もちろん、git subtreeを使う事への代償もありますが、これらは受け入れられるというあろうとして、下記のように挙げています。
- subtreeをマージする戦略について学ぶ必要がある。
- サブプロジェクトのアップストリームにコントリビュートするのはやや複雑になる。
- 親プロジェクトとサブプロジェクトのコミットを混ぜないようにする責任は自分自身にある。
具体的な利用例は元記事の残りを見て頂くとして、subtreeがsubmoduleを使う場合によくある問題をクリアしていることがわかります。基本的には新たなremoteを追加して別々にmergeしていくだけなのでブランチの管理のような感覚で利用できるという事でsubmoduleを避けてわざわざコピーしてしまったような場合はsubtreeの利用を検討してはどうでしょうか。
via:http://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/
コメントを残す