GITFLOWとGITHUBFLOWの比較!ブランチ戦略とは!

DevOps
 Gitは分散型バージョン管理システムで、複数名でプロジェクト・ファイルを共有できる特徴があります。
 開発スピードの向上やミスの低減などメリットがある一方で、開発スタート時に運用ルールを定めておかないと、プロジェクトがまとまらない、ということもあります。
 ブランチは簡単に誰でも作成できることもあり、運用ルールがないとブランチが乱立する恐れがあるのです。
それではGitの考え方には大きくわけて二つあります。それを説明しましょう。
https://twitter.com/tnagasawa/status/190068394341568512

Gitflow とは!運用のフローに必要な軸

git flow では、マスター(master)とデベロップ(develop)という 2本の柱軸として、3本の補助柱を設けてブランチの運用をスマートにします。

2本の軸とは?

master……
  リリースしたデータを置いておくブランチであり、基本的にコミットしない
  リリースのタイミングでだけコミット(マージコミット)するブランチ
日頃の開発作業では、masterブランチに直接コミットしないようにします。
そうすると、masterブランチのHEADに、最も最近リリースされたソースコードがある状態になります。
develop……
開発をおこなうためのブランチ
masterブランチを親として作成します。
この2つの柱(ブランチ)は消滅することなくプロジェクトと共に存続します。
  • masterブランチにdevelopブランチがMergeされる
  • Mergeされた状態にTagが付与される
  • Mergeする前に必要な作業(リリース作業)があればCommitできる

3本の補助柱とは?

feature……
開発をおこなうためのブランチで、個々の機能の実装やバグの解決をおこなう
developブランチを親として作成します。実装が完了したら、featureブランチはdevelopブランチにマージします。
release……
リリース前に準備、微調整をおこなうブランチ
リリースの準備をはじめる時に、developブランチを親として作成します。
リリース終了時、releaseブランチはmasterブランチとdevelopブランチの両方にマージします。
     
hot-fix……
リリースされているデータに、緊急の修正対応をするためのブランチ
リリース済みのコードに重大なバグが見つかった時に修正する場所です

Gitflow の長所・短所は?

新のdevelopブランチから、リリースブランチを作成し、必要な変更を行った後にmasterブランチにMergeし、Tagを付与する
です。
https://twitter.com/msdev/status/571082283081441280

それではメリット

  • hotfix(緊急の修正)とfeature(修正)が明確に区別できる
  • 複数コマンドを一つのコマンドにまとめたことで、マージ先のブランチを間違える等のオペレーションミスを軽減できる
  • 役割ごとに明確に使うタイミングや意図が分けられているためコミットツリーを見ることでどのように作業が進んだかを俯瞰して把握しやすいでしょう。

デメリット

  • デフォルトgitの使い方もわからない初心者がgit-flowを理解するのが難しい
  • IDEとの親和性が良くない(サポートしているIDEもある)
  • 一方で控えめに言ってもgit flowはかなり複雑であると言えるでしょう。
  • ブランチの種類が多いことやその開始地点やマージ先が多岐にわたっています。
  • 一度目を離すとどれが何を表していたかを思い出すことは至難の技でしょう。

それではGitHubflowについて説明します。

GitHUB flowとGitflowの違いは?

まずはgitflowとの違いは?

git flowを簡略化したもの。
具体的には、developブランチが省略されて、pull request機能が使われていることが、大きな違い。

gitflowを使わない理由は?

プロセスは主として「リリース」を中心に設計されている。 私たちはプロダクション環境へのデプロイを毎日(たいていは日に何回も)行うため、「リリース」というものがない。

GitHUB flowのメリットとデメリットは?

メリット

  • レビューの文化が定着する(たとえレビューできなくても、いやでも変更箇所くらいは頭に入ってくる)
  • エンジニア以外との連携も視野に入れられる(デザイナーが画像だけ変更ができる)

デメリット

  • githubを利用できない案件だと、プルリクエストは実現できない

タイトルとURLをコピーしました