(DCPAM 開発における) Git のブランチ利用のモデル
履歴
- 2015-03-20 高橋芳幸
まえがき
ここでは, (DCPAM 開発における) Git のブランチ利用のモデルを示す.
なお, この内容は以下の情報に基づいて作成した.
- "A successful Git branching model" [英語]|[日本語]
- 【初心者向け】gitのbranch運用入門【git flow もどき】
の考え方に基づいている.
ブランチの構想
"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>