GitHub の Template リポジトリを有効活用したい
はじめに
タイトルの通りですが、GitHub の Template リポジトリが何か色々できそうなのになぁと考えていまして。
Template という名前なので、基盤的な扱いができるんじゃないかと頑張ってみた話です。
Template リポジトリ
まず、Template リポジトリを普通に作ります。
内容は他のリポジトリにも使えるような基盤的な部品や、共通部品を格納しておきます。
派生リポジトリ
次に、派生先のリポジトリを作ります。
リポジトリ作成時に、先に作った Template リポジトリをテンプレートとして指定して作成します。
そうすることで、Template の部品がある状態で開発を始めることができます。
ここまでは通常の Template リポジトリの運用です。
Template に変更がある場合
ここからが問題。Template を更新したい場合どうなるでしょうか?
いくら Template から作成したとは言え、派生リポジトリはもう独立したリポジトリ。さっくり Template の内容を参照することはできません。
ここで登場するのが、派生リポジトリのリモートを追加するというもの。
まず、リモートを追加します。今回名前は base としています。
$ git remote add base https://github.com/xxx/template.git
追加したリモートの内容を取得します。
$ git fetch base
テンプレートのブランチをマージします。
$ git merge base/feature1 --allow-unrelated-histories
ポイントは --allow-unrelated-histories オプションで、これが無いと変更を取り込めません。
無理やり入れちゃいましょう。
ちなみにマージはタグでも OK です。
$ git merge base/v1.0.0 --allow-unrelated-histories
ここは必須ではないですが、管理が面倒になるので取り込み後のリモートは削除しておきます。
$ git remote remove base
また、一応派生リポジトリから Template リポジトリへもプッシュできちゃいます。
$ git push base feature2:feature1
結局運用はどうすればいいのか
ここはプロジェクトのルールによるところですが、個人的に下記2点を抑えておけばいいんじゃないかなと思います。
- Template リポジトリと派生リポジトリで触っていい領域を決めておく
- 派生リポジトリから Template リポジトリへはプッシュしない
やはり一番怖いのはコンフリクトですが、それは『触っていい領域を決めておく』という制約、運用でどうにかなると思います。
また、派生リポジトリから Template リポジトリへプッシュすると本当に煩雑になってえらいこっちゃになるので、これも禁止しておくといいと思います。
最後に
GitHub の Template リポジトリの運用を考えてみました。
まだまだトラブルも出てくるかもしれませんが、適宜追記していこうと思います。
よき GitHub ライフを!
Discussion