【Git-Flow+PR】プロジェクトをGit-Flowに移行してみた。
前書き
最近、Githubで管理している既存リポジトリのワークフローをGit-Flowに移行しました。今までなんちゃってGithub-Flowで運用していたのですが、ステージング環境の構築に伴い、ワークフローの見直しをすることになりました。そこで、Git-Flowを採用することになったので、軽くまとめておきたいと思います。
ちなみに、今回は、Git-FlowにPR(レビュー)を取り入れたフローを想定しています。
Git-Flowについて
最初にGit-Flowの概要について解説していきます。
ブランチの種類
Git-Flowでは下記のブランチが使われます。
maindevelopfeaturehotfixesrelease
main
プロダクトとしてリリースするためのブランチです。
それぞれのコミットにTagをつけて運用します。
develop
開発用のブランチです。リリース準備ができたらdevelopブランチをreleaseブランチを介してmainブランチにマージします。
feature
機能の追加等、実際の開発を行うブランチです。developブランチから切って作業し、developブランチにマージします。
hotfixes
現在のプロダクトに対するクリティカルな修正を行うブランチです。なので、mainからブランチを切り、mainにマージしてタグ付けした後、developブランチにマージします。
release
プロダクトリリースの準備をするブランチ。リリースに関連が強い作業はこのブランチで行います。作業が完了したら、developとmainブランチにマージして、タグ(バージョンの)をつけます。
タグに関しては、mainにマージするタイミングでタグ付けを行う、と覚えておけばよきかと思います。
以降から Git-Flowの設定と実際の開発フローを解説していこう思います。
【Git-Flowの初期設定】
最初にGit-Flowの初期設定を行なっていきます。
(1)developブランチの作成
先にmainからdevelopブランチを作成しておきます。
# mainブランチにいるか確認する
$ git branch
*main
# developの作成
$ git switch -c develop
# リモートにdevelopを登録
$ git push origin develop
(2)Githubでbaseブランチを変更
この変更は任意です。
今回のフローでは、PRを出してレビューをしてもらうフローを組み込みます。しかしデフォルトではPRを出すと、mainブランチにマージしようとしてしまいます。いちいち手動で変えるのも面倒くさいので、githubの設定を変更してしまいましょう。
Githubのプロジェクトを開く→Settings→Branchesを開いてください。
次に下記の赤枠のボタンを押してください。
そしたらモーダルが出てくると思います。mainブランチが選択されているので、developを選択し、updateボタンを押してください。
そしたら下記のスクショのような画面が出てくると思うので、ボタンをクリックしてください。
これで、PRを出したらデフォルトでdevelopがマージの指定先として選択されている状態になります。
(3)git flow init
下記のコマンドでGit-Flowの初期設定をすることができます。質問を色々されるのですが、全てEnterで問題ないと思います。
$ git flow init
*環境ごとにbrew install git-flow等でインストールが必要です。
設定は以上です!以降から実際の開発フローについて解説していきます。
【通常の開発フロー】
では、通常の開発フローを解説しています。
(1)featureブランチを作成する
$ git flow feature start hoge
$ git branch
* feature/hoge
main
develop
git flow feature start [ブランチ名]とコマンドを実行することで、feature/ブランチ名というブランチ名が作成されます。
このブランチで実際の作業を行います。
ちなみに、git switch -c feature/hogeのように直接ブランチを切っても大丈夫です。(多分。。。筆者の手元では問題なく動きました。)
(2)add,commit,pushする
作業が完了してaddしてcommitしたらpushしてPRを出します。
$ git push origin feature/hoge
(3)レビュー,マージ
Github上でレビューをもらったら、developブランチにマージしてください。
【プロダクトをリリースする】
では、mainブランチにマージしてプロダクトをリリースしていきたいと思います。
(1)releaseブランチの作成
$ git flow release start 1.0.0
上記のコマンドでdevelopブランチからreleaseブランチを作成してくれます。
(2)リリース作業
releaseブランチでリリース作業や、そこで見つかったバグなどを修正します。修正したら、mainとdevelopブランチにマージしていきます。今回はレビューをしてもらう想定なので、releaseブランチをpushしてPRを出します。
$ git push origin release/1.0.0
mainにマージしたら、タグ付けをしてバージョンを記録しましょう。
# タグ付け
$ git tag -a v1.0.0 -m first-release
# リモートにタグを反映
$ git push origin v1.0.0
mainにマージが完了したら、developブランチにreleaseブランチをマージして最新の状態反映させておきましょう。
【緊急対応】
リリース済みなプロダクトに対して、緊急のバグ対応が必要になった場合は、mainブランチからhotfixブランチを作成して対応します。
その流れを解説していきます。
(1)mainブランチからhotfixを切る
$ git flow hotfix start [ブランチ名]
上記のコマンドでhotfixがブランチを作成することができます。
(2)mainにマージ,タグ付け
修正作業が完了したら、下記のコマンドでPRを出し、レビューをもらってmainにマージします。
$ git push origin hotfix/[ブランチ名]
マージが完了したらタグ付けして、リモートに反映させましょう。
# タグ付け
$ git tag -a v1.0.1 -m hotfix
# リモートにタグを反映
$ git push origin v1.0.1
(3)developブランチにマージ
mainにマージが完了したら、developブランチにマージをして変更を反映させてください。
Git-Flowの基本的なところは以上です。お疲れ様でした🙇♂️
Discussion