(DCPAM 開発における) Git のブランチ利用のモデル

履歴

  • 2015-03-20 高橋芳幸

まえがき

ここでは, (DCPAM 開発における) Git のブランチ利用のモデルを示す.

なお, この内容は以下の情報に基づいて作成した.

の考え方に基づいている.

ブランチの構想

"A successful Git branching model" [英語]|[日本語] の考え方に基づき, 下に挙げる種類のブランチの運用を考える.

ただし, 現状, ここでは master, develop, feature ブランチの利用についてのみ紹介する. なお, もちろん, 各種のブランチ自体の名前は自由に決めればよい.

  • master ブランチ
    • 製品としてリリースされる状態にあるブランチ
      • 共有リポジトリにも存在するブランチ
    • DCPAM Git リポジトリでは push できるユーザを制限している
  • develop ブランチ
    • 次のリリースのための開発用ブランチ
      • ソースコードが安定したら master ブランチへマージされる
      • 共有リポジトリにも存在するブランチ
    • 分岐元
      • master
    • マージ先
      • master
  • feature ブランチ
    • 新機能を開発するためのブランチ
      • 残念ながら捨てられるかもしれない開発を行うブランチ
      • 共有リポジトリには存在しないブランチ
    • 分岐元
      • develop
    • マージ先
      • develop
  • release ブランチ
    • 新しい製品のリリースを準備するブランチ
      • 共有リポジトリには存在しないブランチ
    • 分岐元
      • develop
    • マージ先
      • develop と master
  • hotfix ブランチ
    • 後々追記.

実質的には, 多くの開発者は下のような作業を行うことになるだろう.

  • 共有リポジトリから develop ブランチを取得
  • ローカルの develop ブランチからローカルの feature ブランチを作成
  • ローカルの feature ブランチで開発
    • 共有リポジトリの develop ブランチが他の開発者によって更新されたら, その更新をローカルの develop, feature ブランチにマージしても良いかもしれない
  • ローカルの feature ブランチの開発が成功したらローカルの develop ブランチにマージ
  • feature ブランチの開発が終了/上手く行かなければ feature ブランチを削除
  • ローカルの develop ブランチが落ち着いたら共有リポジトリの develop ブランチに push

最初一度だけの作業

共有リポジトリから clone

> git clone -v dennou-k.gfd-dennou.org:/GFD_Dennou_Club/ftp/library/dcpam/git_repos/dcpam.git

ローカルに (master から) develop ブランチを作成

> git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'

共有リポジトリの develop からローカルの develop を更新

> git pull origin develop

定常的作業

開発用の feature ブランチを作成

> git branch feature
> git checkout feature

git branch でブランチを作成. git checkout で作業ブランチを feature に設定. git branch のみでは, 作業は引き続き元のブランチ (develop ブランチ) で行われる.

開発

> git checkout feature

作業ブランチを feature に設定 (上記で済んでいれば不必要).

開発.

> emacs -nw
...

開発結果をローカルにコミット.

> git add <file>
> git commit <file> -m "..."

リモートの develop が更新された時の対応

もしリモートの develop が更新されたらローカルの develop に取り込み, さらにローカルの feature にマージしても良い*かもしれない*. しなくてもよいかもしれない.

> git checkout develop
> git pull origin develop
> git checkout feature
> git merge --no-ff develop

この --no-ff は重要らしい

ローカルの feature の開発が成功したらローカルの develop ブランチにマージ

> git checkout develop
> git merge --no-ff feature

この --no-ff は重要らしい.

ローカルの develop ブランチをリモートの develop ブランチに反映

> git push origin develop

(必要に応じて) feature ブランチを削除

> git branch -d feature

一般的なこと

ブランチを表示

> git branch

リモートも含めて表示

> git branch -a

ブランチの作成とチェックアウト

ブランチを作成してチェックアウト

> git checkout -b <branch> <start point>

作成とチェックアウトを分けてやる

> git branch <branch> <start point>
> git checkout <branch>

git branch のみでは HEAD は移らない.

ブランチの削除

> git checkout -d <branch>