git flow

since 2011-10-15

git を A successful Git branching model に基づいて運用するためのプラグイン、という話。

本家記事 http://nvie.com/posts/a-successful-git-branching-model/

ツール https://github.com/nvie/gitflow

日本語記事 http://keijinsonyaban.blogspot.com/2010/10/successful-git-branching-model.html

日本語でのツール解説 http://d.hatena.ne.jp/Voluntas/20101223/1293111549

git-flow によるブランチの管理 http://www.oreilly.co.jp/community/blog/2011/11/branch-model-with-git-flow.html

以下のような定型的なブランチの運用が支援される:

git flow feature start 機能の名前
git flow release start バージョン番号

Mac で試す

since 2012-06-30

$ sudo port install git-flow
$ mkdir gitflow-test

$ cd gitflow-test

$ git flow init
Initialized empty Git repository in /Users/nishimotz/work/gitflow-test/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master] 
Branch name for "next release" development: [develop] 

How to name your supporting branch prefixes?
Feature branches? [feature/] 
Release branches? [release/] 
Hotfix branches? [hotfix/] 
Support branches? [support/] 
Version tag prefix? [] 

$ git branch
* develop
  master

feature hello を作ってみる:

$ git flow feature start hello
Switched to a new branch 'feature/hello'

Summary of actions:
- A new branch 'feature/hello' was created, based on 'develop'
- You are now on branch 'feature/hello'

Now, start committing on your feature. When done, use:

     git flow feature finish hello

$ git branch
  develop
* feature/hello
  master
$ echo "print 'hello'" > main.py
$ python main.py
hello
$ git add main.py 
$ git commit -m "added hello to main"
[feature/hello 57b4353] added hello to main
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 main.py

ちょっと reflog してみる:

$ git reflog
57b4353 HEAD@{0}: commit: added hello to main
0a8106a HEAD@{1}: checkout: moving from develop to feature/hello
0a8106a HEAD@{2}: checkout: moving from master to develop
0a8106a HEAD@{3}: commit (initial): Initial commit

feature finish する:

$ git flow feature finish hello
Switched to branch 'develop'
Updating 0a8106a..57b4353
Fast-forward
 main.py |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 main.py
Deleted branch feature/hello (was 57b4353).

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

これで機能ブランチから開発ブランチにマージされ、機能ブランチは消える。

何が起きたのかを確認する:

$ git branch
* develop
  master

$ git reflog
57b4353 HEAD@{0}: merge feature/hello: Fast-forward
0a8106a HEAD@{1}: checkout: moving from feature/hello to develop
57b4353 HEAD@{2}: commit: added hello to main
0a8106a HEAD@{3}: checkout: moving from develop to feature/hello
0a8106a HEAD@{4}: checkout: moving from master to develop
0a8106a HEAD@{5}: commit (initial): Initial commit

git init してから git flow init

since 2012-06-30

すでに git で作業しているリポジトリで新たに git flow init するとどうなるか、やってみた。

すでにある master ブランチをプロダクションブランチにするかどうか聞いてくれる:

$ mkdir git-test
$ cd git-test
$ git init
Initialized empty Git repository in /Users/nishimotz/work/git-test/.git/

$ echo "print 'hello'" > main.py
$ git add main.py 
$ git commit -m "initial"
[master (root-commit) dbb67e3] initial
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 main.py

$ git status
# On branch master
nothing to commit (working directory clean)

$ git flow init

Which branch should be used for bringing forth production releases?
   - master
Branch name for production releases: [master] 
Branch name for "next release" development: [develop] 

How to name your supporting branch prefixes?
Feature branches? [feature/] 
Release branches? [release/] 
Hotfix branches? [hotfix/] 
Support branches? [support/] 
Version tag prefix? [] 

$ git branch
* develop
  master

複数のブランチがすでにあると、どれかひとつのブランチを production に選んで、別のどれかひとつのブランチを "next release" に選べと言われる。

git_flow.txt · 最終更新: 2012/06/30 18:15 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0