【Git第7回】チーム開発/Git-flowのインストールから使ってみるまでハンズオンしてみた

【Git第7回】チーム開発/Git-flowのインストールから使ってみるまでハンズオンしてみた

以下の記事や動画を参考に、Git-flowの使い方をハンズオンしましたので、備忘録として残します。

【参考記事】


【関連記事】

Git-flowの概要

  • git-flowは、Gitを使った効率的なソフトウェア開発プロセスを提供するブランチモデル
  • Vincent Driessenによって提案され、大規模なチームでの開発に適している
  • このモデルは、主に5つのブランチで構成されている
  • 以下のようなブランチ構成を採用することで、機能追加や修正、リリースなどの各作業を明確に区分けし、協調作業を効率的に進めることができる

5つのブランチ

Master ・最新のリリースされたコードが格納されるブランチ
・安定したコードのみがマージされる
Develop ・主要な開発作業が行われるブランチ
・次のリリースのための機能や修正がマージされる
Feature ・新機能の開発を行うためのブランチ
・Developブランチから派生する
・フィーチャーが完成したら、Developブランチにマージされる
Release ・次のリリースの準備が整った段階でDevelopブランチから派生する
・テストやQA、リリースノートの作成などが行われる
・問題がなければ、Masterブランチにマージされる
Hotfix ・Masterブランチで発生した重大なバグの修正のためのブランチ
Masterブランチから派生
・修正が完了したら、MasterブランチDevelopブランチの両方にマージされる

A successful Git Branching model

引用元:A successful Git branching model


事前準備

作業の前提

  • GitがローカルPCにインストール済み
  • リモートリポジトリに何かプロダクトを作っておく
  • branchはmasterブランチ
  • 動きの検証なのでなんでもいいのだが、今回はmasterブランチの「README.md」に追記してみる
  • git statusコマンドでクリーンな状態(リモートとローカルで差分がない状態)でハンズオンスタート

今回修正する項目

作業前のREADME.md

for development private repo
https://github.com/conti0513?tab=repositories

# DIR
development_private
├──DIR1
├──DIR2
├──DIR3
├──.gitignore
├──.git

 

作業後のREADME.md

for development private repo
https://github.com/conti0513?tab=repositories

# DIR
development_private
├──DIR1
├──DIR2
├──DIR3
├──DIR4       # ここを追記
├──.gitignore
├──.git

GIt-flowを初期化

Git-flowをインストール

# ディレクトリの移動
cd <作業ディレクトリ>

# Git-flowをインストール
$ brew install git-flow

# インストール後の確認
$ git flow version
0.4.1

develop branchを作る

初回の作業

# develop branchを作成
$ git checkout -b develop
$ git flow init -d
$ git branch

# result
* develop
  master
  tutorial

# GitHubにプッシュ
$ git push origin develop

# result
* [new branch] develop -> develop

2回目以降

# developブランチに移動
$ git checkout develop

# result
Switched to branch 'develop'

# 確認
$ git branch

# result
* develop
  master

feature branchで機能開発

# 書式
git flow feature start <feature-branch-name>

# ex)
$ git flow feature start change_readme

# 確認
# 「feature/change_readme」が作成されていることを確認
$ git branch
  develop
* feature/change_readme
  master

新しい機能を追加

  • ex) DIR4を作成し、README.mdを以下のように修正
  • 作業後のREADME.mdは以下の通り
for development private repo
https://github.com/conti0513?tab=repositories

# DIR
development_private
├──DIR1
├──DIR2
├──DIR3
├──DIR4            # ここを追記
├──.gitignore
├──.git

feature branch —> develop branchへのマージ

Git Hubにプッシュ

ここは通常通りプッシュまでしていきます。

$ git add README.md
$ git commit -m "README.md"
$ git branch
# push前の確認
# ex)
  develop
* feature/change_readme
  master
$ git push origin feature/change_readme

上記の結果、Git Hub上に「 feature/change_readme had recent pushes less than a minute ago」の記載がされます。

通常であれば、このタイミングでGit-Hub上でPR(プルリクエスト)を作成。その後確認を経てマージされますが、今回はGit-flowでマージしていきます。

GIt flowでマージする手順

  • コマンドでマージする
  • このコマンドを実行することで、以下の作業が自動に行われる

コマンドで実施されること

  • developブランチにcheckout
  • featureブランチをマージ
  • featureブランチの削除
$ git flow feature finish change_readme

# result
- Switched to branch 'develop'
Updating 4dc4e49..cd7a5b1
Fast-forward
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Deleted branch feature/change_readme (was cd7a5b1).

Summary of actions:
- The feature branch 'feature/change_readme' was merged into 'develop'
- Feature branch 'feature/change_readme' has been removed
- You are now on branch 'develop'

# 確認
$ git branch
*develop
 master

# リモートにプッシュ
# 自動でPRがクローズされる
$ git push origin develop

develop branch —> main branchへのマージ

releaseブランチでリリースを準備

  • releaseブランチでリリースを準備していく
  • このコマンドを実行することで、以下の作業が自動に行われる

「release finish」コマンドで実施されること

  • releaseブランチをmasterブランチにマージ
  • releaseブランチをdevelopブランチにマージ
  • releaseブランチを削除
# 書式
git flow release start <tag>

# ex)
$ git flow release start 1.0

# 確認
$ git branch
  develop
  master
* release/1.0

# releaseブランチをmasterとdevelopにマージ → releaseブランチを削除
$ git flow release finish 1.0

リリース

ここまですると、masterブランチは新しいリリースバージョンのソースコードを持っています。

最後にmasterブランチをタグと一緒にリポジトリにpushしてリリースします。

$ git push --tags
$ git push origin develop
$ git push origin master

注意

最近ではリリースブランチを使わず、develop branch → main branchに直接マージする場合もあります。

リリース後のバグ対応

リリースされたバージョンに緊急のバグが発生するとhotfixブランチで対応します。

まず、hotfixブランチを作成します。

$ git flow hotfix start

作成したhotfixブランチで緊急のバグを修正した後、finishコマンドを使ってmasterブランチにマージします。

$ git flow hotfix finish

 

このコマンドを実行することで、以下の作業が自動に行われます。

  • hotfixブランチをmasterブランチにマージ
  • hotfixブランチをdevelopブランチにマージ
  • hotfixブランチを削除