現在、新しいプロジェクトに参画してGitのブランチ戦略を考えています。
何回かブランチ戦略を考え、そして運用してきたのですが、思うところを書いてみます。
まず、ブランチ戦略検討時、しばしば思うのが、
-
経験に差があるため、何が問題(となりやすい)なのかが共有できない
ということです。 Gitのブランチングは、比較的共通言語化(successful git branching model(git flow) だとか、 github flowだとか)しているにも関わらず、実際にこれらに従って開発したことがある人の割合が想像以上に低いです。
-
git flowは難しいだとか変な予備知識を仕入れてしまって、ブランチ戦略を考える人が余計なオリジナリティを出してしまう現場が多い
-
そももそもまともにブランチ戦略を考えないまま運用している
みたいなことなんだろうな…と考えます。
私が いつも Gitブランチを運用していて難しいと感じることは、git flowが複雑だとかそんな些細な問題ではなく、
-
長寿命になってしまうブランチの取り扱い
です。また、付随して、
-
git flowの図で言うところの
develop
ブランチを複数本用意しなければ行けない状況
が発生することです。
寿命が長くなるということは即ち本流にマージできるタイミングを調整しなければいけない事情が発生している、ということです。
(そしてそういう事情が発生しないプロジェクトは今まで経験したことがないです。 (もしこんな問題がないのなら、それこそgithub flowで十分だと思います。))
マージできるタイミングを伺う必要が出てくると、
-
いざマージしようとしたときにconflictが発生した
-
マージしようとしているfeatureブランチを切ったタイミングより前のタイミングに対してのdevelopブランチに対してマージする必要が出た
-
(当初想定していたバージョンより前のバージョンでリリースすることになった、というような場合に発生する)
-
みたいな問題が発生し、この解決に時間を取られてしまいます/作業時にミスが混入してしまいます。
ブランチ戦略を考える上で解決すべき事項はこれらである、というのが全然理解されないなあ、というのが今日の困りごとでした。
まとめると、ブランチ戦略を策定する上で重要なことは、
-
ブランチ戦略にオリジナリティを出そうとするな
-
オリジナリティを出して良いのは既に全員がメジャーなブランチ戦略について理解している場合に限る
-
-
git flow の develop ブランチが複数できる問題について考えろ
-
もちろん可能なら1本で運用できるのが望ましいのだが
-
です。