git の branch と tag の使い分けが気になったので、Kubernetesプロジェクトを例に、整理してみた。プロジェクト毎の決め事だと思うので、必ずしもこの方法が正しいという訳ではない。一つの参考として見做して欲しい。
branch とは
ブランチとは、開発の本流から分岐し、本流の開発を邪魔することなく作業を続ける機能
tag とは
タグとは、歴史上の重要なポイントに印をつける機能です。よくあるのは、この機能を (v 1.0など) リリースポイントとして使うこと。
Kubernetesプロジェクトでの branch と tagの使い分け
このプロジェクトでは、全てのリリースの中で最新のコードが、masterにある。そして、各リリースで保守されている最新コードが、release-x.xx にある。例えば、git clone http://https://github.com/kubernetes/kubernetes
や git clone -b release-1.19 http://https://github.com/kubernetes/kubernetes
として ローカルにクローンしてビルドしても、動作するバージョンをビルドすることはできない。つまり、開発途上のコードだからである。
tagは、v1.18.4 や v1.18.5 など、それぞれの マイナーバージョンの下のパッチバージョンに対して、tag が設定される。この tag を利用してクローンするには、git clone -b <tag名> http://https://github.com/kubernetes/kubernetes
としてクローンされる。 または マスターをクローンした後、git checkout -b v1.18.4
などとすることで、タグが付与された時点のコードを使用できる。これによって、リリースされた時点のコードを取得できる。
ブランチのリストを表示した様子
タグのリストを表示した様子
まとめ
branchは、その名の通り、分岐を意味する。そのため、branch を作成した後、branch に対して、更新を続けていくことができる。一方、tag を指定して branch のようにクローンやチェックアウトができても、しかし、tag に更新を加えることは出来ない、いわゆる スナップショットのような存在とみなせる。
参考資料
- Gitを使った分散開発管理7 – ブランチとタグを使う, https://dev.classmethod.jp/articles/git-branchtag/