SlideShare una empresa de Scribd logo
1 de 25
Pretty Good
  Branch Strategy
  for Git/Mercurial
Git/Mercurialのためのわかりやすいブランチ戦略



             makoto kuwata
      http://www.kuwata-lab.com/
Version Number
Ver.1.2.3
Ver.1.2.3
Major Version
・大幅な機能拡張
・後方互換性はないことが多い
Ver.1.2.3
  Minor Version
  ・後方互換性を保ったままでの拡張
   (やむを得ず保たれないこともある)
Ver.1.2.3
      Patch Level
      ・バグ修正が目的(機能拡張はしない)
      ・後方互換性は極力保たれる
Version v.s Branch
Ver.1.2.3
Development Branch
         Release Branch
              Release Tag
Major Version   Development Branch
       1             1

       N             N


Minor Version   Release Branch
       1             1

       N             N


 Patch Level    Release Tag
Practical Example
Major Versionごとに
開発用ブランチを用意


                     dev-1
                   (ver 1.x用branch)
dev-1
                       (ver 1.x用branch)



                         dev-2
                       (ver 2.x用branch)
Major Versionを上げるたびに
新しい開発用ブランチを作成
Minor Versionごとに
リリース用ブランチを作成



                     rel-1.0
                    (ver 1.0用branch)



                      dev-1
                    (ver 1.x用branch)
リリースに伴う作業は
リリース用ブランチで行う



                rel-1.0
               (ver 1.0用branch)



                 dev-1
               (ver 1.x用branch)
リリースしたら
 タグを打つ


    r1.0.0
              rel-1.0
             (ver 1.0用branch)



               dev-1
             (ver 1.x用branch)
リリースのたびに
     タグを打つ


r1.0.0   r1.0.1
                   rel-1.0
                  (ver 1.0用branch)



                    dev-1
                  (ver 1.x用branch)
Patch Levelを上げるたびに
              これを繰り返す


r1.0.0     r1.0.1   r1.0.2
                               rel-1.0
                              (ver 1.0用branch)



                                dev-1
                              (ver 1.x用branch)
Minor Versionを上げるときは
新しいリリース用ブランチを作成



 rel-1.0                 rel-1.1
(ver 1.0用branch)        (ver 1.1用branch)



                          dev-1
                        (ver 1.x用branch)
Other Topics
•   リリースブランチは削除しない(git flowとは違う!)


•   "master" や "trunk" は使わない (プロジェクトによって
    開発用だったりリリース用だったりするので混乱の元)


•   Topic Branch は強く推奨される


•   リリースブランチに適用したコミットは、必要なら
    cherry-pickで開発用ブランチにも適用する(逆も可)


•   git cherry -v rel-1.0 dev-1          e!
                                    esom
                                  aw
Conclusion
r1.0.0   r1.0.1
            rel-1.0            rel-1.1
           (ver 1.0用branch)   (ver 1.0用branch)



                                dev-1
                              (ver 1.x用branch)



                                dev-2
                              (ver 2.x用branch)
One More Thing...
~/.gitconfig
	 [alias]
	  st	 =	 status	 -sb
	  ci	 =	 commit
	  co	 =	 checkout
	  correct	 =	 commit	 --amend
	  switch	 	 =	 checkout
	  fork	 	 	 	 =	 checkout	 -b
	  join	 	 	 	 =	 merge	 --no-ff
	  stage	 	 	 =	 add
	  staged	 	 =	 diff	 --cached
	  stashed	 =	 stash	 list
	  history	 =	 log	 --oneline	 --graph	 --date=short	 --decorate
	  commitdiff	 =	 cherry	 -v
おしまい

Más contenido relacionado

Destacado

文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみたkwatch
 
Underlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R MapperUnderlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R Mapperkwatch
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策kwatch
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラムkwatch
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -kwatch
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?kwatch
 
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方kwatch
 
なんでもID
なんでもIDなんでもID
なんでもIDkwatch
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するkwatch
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Pythonkwatch
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方kwatch
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐkwatch
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!kwatch
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?kwatch
 
Migr8.rb チュートリアル
Migr8.rb チュートリアルMigr8.rb チュートリアル
Migr8.rb チュートリアルkwatch
 
HTMLデザインを崩さないテンプレートエンジンの作り方
HTMLデザインを崩さないテンプレートエンジンの作り方HTMLデザインを崩さないテンプレートエンジンの作り方
HTMLデザインを崩さないテンプレートエンジンの作り方kwatch
 

Destacado (17)

文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた
 
Underlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R MapperUnderlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R Mapper
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラム
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
 
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
 
なんでもID
なんでもIDなんでもID
なんでもID
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
Migr8.rb チュートリアル
Migr8.rb チュートリアルMigr8.rb チュートリアル
Migr8.rb チュートリアル
 
HTMLデザインを崩さないテンプレートエンジンの作り方
HTMLデザインを崩さないテンプレートエンジンの作り方HTMLデザインを崩さないテンプレートエンジンの作り方
HTMLデザインを崩さないテンプレートエンジンの作り方
 

Similar a Pretty Good Branch Strategy for Git/Mercurial

はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)将 高野
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例Hirohito Kato
 
バージョン管理の断捨離
バージョン管理の断捨離バージョン管理の断捨離
バージョン管理の断捨離Kazushi Kamegawa
 
Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編Yohei Yasukawa
 
分散バージョン管理システムGitの紹介
分散バージョン管理システムGitの紹介分散バージョン管理システムGitの紹介
分散バージョン管理システムGitの紹介tod esking
 
第7回oss貢献者賞 森-20120316
第7回oss貢献者賞 森-20120316第7回oss貢献者賞 森-20120316
第7回oss貢献者賞 森-20120316ksk_ha
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件y-uti
 
構成管理のアンチパターン
構成管理のアンチパターン構成管理のアンチパターン
構成管理のアンチパターンakipii Oga
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0Yoshifumi Kawai
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Shota Umeda
 
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab満徳 関
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードKazuhiro Hara
 
Zabbix meeting 2011 Oct 22th - Zabbixのバグ・パッチ報告の手順 - takanori suzuki
Zabbix meeting 2011 Oct 22th - Zabbixのバグ・パッチ報告の手順 - takanori suzukiZabbix meeting 2011 Oct 22th - Zabbixのバグ・パッチ報告の手順 - takanori suzuki
Zabbix meeting 2011 Oct 22th - Zabbixのバグ・パッチ報告の手順 - takanori suzukitakanori suzuki
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜Taro Matsuzawa
 
Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021Hideki Saito
 
Rails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: RailsアプリケーションのデバッグRails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: RailsアプリケーションのデバッグYohei Yasukawa
 

Similar a Pretty Good Branch Strategy for Git/Mercurial (20)

はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)はじめてのReleaseブランチ運用(svn編)
はじめてのReleaseブランチ運用(svn編)
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例
 
バージョン管理の断捨離
バージョン管理の断捨離バージョン管理の断捨離
バージョン管理の断捨離
 
Ruby In Wheezy
Ruby In WheezyRuby In Wheezy
Ruby In Wheezy
 
Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編
 
Git (運用編)
Git (運用編)Git (運用編)
Git (運用編)
 
分散バージョン管理システムGitの紹介
分散バージョン管理システムGitの紹介分散バージョン管理システムGitの紹介
分散バージョン管理システムGitの紹介
 
dvcs-kyoto
dvcs-kyotodvcs-kyoto
dvcs-kyoto
 
第7回oss貢献者賞 森-20120316
第7回oss貢献者賞 森-20120316第7回oss貢献者賞 森-20120316
第7回oss貢献者賞 森-20120316
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
 
構成管理のアンチパターン
構成管理のアンチパターン構成管理のアンチパターン
構成管理のアンチパターン
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
 
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
Zabbix meeting 2011 Oct 22th - Zabbixのバグ・パッチ報告の手順 - takanori suzuki
Zabbix meeting 2011 Oct 22th - Zabbixのバグ・パッチ報告の手順 - takanori suzukiZabbix meeting 2011 Oct 22th - Zabbixのバグ・パッチ報告の手順 - takanori suzuki
Zabbix meeting 2011 Oct 22th - Zabbixのバグ・パッチ報告の手順 - takanori suzuki
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜
 
Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021Ansible troubleshooting 101_2021
Ansible troubleshooting 101_2021
 
Rails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: RailsアプリケーションのデバッグRails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: Railsアプリケーションのデバッグ
 
Composer
 Composer Composer
Composer
 

Más de kwatch

How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Pythonkwatch
 
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)kwatch
 
Javaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンJavaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンkwatch
 
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -kwatch
 
Benchmarker - A Good Friend for Performance
Benchmarker - A Good Friend for PerformanceBenchmarker - A Good Friend for Performance
Benchmarker - A Good Friend for Performancekwatch
 
How to Create a High-Speed Template Engine in Python
How to Create a High-Speed Template Engine in PythonHow to Create a High-Speed Template Engine in Python
How to Create a High-Speed Template Engine in Pythonkwatch
 
HTMLデザインを崩さないテンプレートエンジンの作り方パート2
HTMLデザインを崩さないテンプレートエンジンの作り方パート2HTMLデザインを崩さないテンプレートエンジンの作り方パート2
HTMLデザインを崩さないテンプレートエンジンの作り方パート2kwatch
 
PHPer100人にPythonを教えてみた
PHPer100人にPythonを教えてみたPHPer100人にPythonを教えてみた
PHPer100人にPythonを教えてみたkwatch
 
How to Make Designer-Friendly Template Engine
How to Make Designer-Friendly Template EngineHow to Make Designer-Friendly Template Engine
How to Make Designer-Friendly Template Enginekwatch
 
ビュー層におけるキャッシュの問題点とその解決策
ビュー層におけるキャッシュの問題点とその解決策ビュー層におけるキャッシュの問題点とその解決策
ビュー層におけるキャッシュの問題点とその解決策kwatch
 
Basic Mechanism of OOPL
Basic Mechanism of OOPLBasic Mechanism of OOPL
Basic Mechanism of OOPLkwatch
 
PythonでRakeもどきを作ってみた
PythonでRakeもどきを作ってみたPythonでRakeもどきを作ってみた
PythonでRakeもどきを作ってみたkwatch
 

Más de kwatch (12)

How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Python
 
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
 
Javaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンJavaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジン
 
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
 
Benchmarker - A Good Friend for Performance
Benchmarker - A Good Friend for PerformanceBenchmarker - A Good Friend for Performance
Benchmarker - A Good Friend for Performance
 
How to Create a High-Speed Template Engine in Python
How to Create a High-Speed Template Engine in PythonHow to Create a High-Speed Template Engine in Python
How to Create a High-Speed Template Engine in Python
 
HTMLデザインを崩さないテンプレートエンジンの作り方パート2
HTMLデザインを崩さないテンプレートエンジンの作り方パート2HTMLデザインを崩さないテンプレートエンジンの作り方パート2
HTMLデザインを崩さないテンプレートエンジンの作り方パート2
 
PHPer100人にPythonを教えてみた
PHPer100人にPythonを教えてみたPHPer100人にPythonを教えてみた
PHPer100人にPythonを教えてみた
 
How to Make Designer-Friendly Template Engine
How to Make Designer-Friendly Template EngineHow to Make Designer-Friendly Template Engine
How to Make Designer-Friendly Template Engine
 
ビュー層におけるキャッシュの問題点とその解決策
ビュー層におけるキャッシュの問題点とその解決策ビュー層におけるキャッシュの問題点とその解決策
ビュー層におけるキャッシュの問題点とその解決策
 
Basic Mechanism of OOPL
Basic Mechanism of OOPLBasic Mechanism of OOPL
Basic Mechanism of OOPL
 
PythonでRakeもどきを作ってみた
PythonでRakeもどきを作ってみたPythonでRakeもどきを作ってみた
PythonでRakeもどきを作ってみた
 

Pretty Good Branch Strategy for Git/Mercurial