master/develop ブランチなモデル
ええと、A successful Git branching model なんですが、release branch なナニが若干微妙。
- release branch は develop から作成される
- develop と master に merge される
手順として
branch off して云々
$ git checkout -b release-1.2 develop Switched to a new branch "release-1.2" $ ./bump-version.sh 1.2 Files modified successfully, version bumped to 1.2. $ git commit -a -m "Bumped version number to 1.2" [release-1.2 74d9424] Bumped version number to 1.2 1 files changed, 1 insertions(+), 1 deletions(-)
commit したら master に merge
$ git checkout master Switched to branch 'master' $ git merge --no-ff release-1.2 Merge made by recursive. (Summary of changes) $ git tag -a 1.2
develop 方面へも同様に盛り込み
$ git checkout develop Switched to branch 'develop' $ git merge --no-ff release-1.2 Merge made by recursive. (Summary of changes)
という流れなのはさくっと理解できるんですが、元が develop な branch を master に merge する、というのは問題ないのだろうか。
という事で
簡単に試験してみます。手順としては以下かな。Android のハロワにするかどうするか。
- リモートリポジトリのガワを作成
- ローカルリポジトリ作成して origin/master に push
- git add して commit してリモートに push
- master から develop ブランチを作って origin/develop に push
- clone し直して origin/develop を checkout
- git checkout -t -b develop origin/develop
- ここから develop ブランチを育てる
- どこかのタイミングで develop 発の release-1.0 なブランチを作る
- 適当に育てる
- master に merge してみてどうなるか
- よくよく考えてみるに、上記の状態であれば祖先は master だからなぁ。。。
- でも release な branch は必ず master にも develop にも merge される、というルールなのであれば問題無いのかなぁ
試験
どっかに作った痕跡が無いかなぁ、と探してみたら github 方面にありました。
$ git clone git@github.com:yamanetoshi/Android-Exercise.git Cloning into Android-Exercise... Enter passphrase for key '/Users/tyamane/.ssh/id_rsa': remote: Counting objects: 39, done. remote: Compressing objects: 100% (21/21), done. remote: Total 39 (delta 5), reused 0 (delta 0) Receiving objects: 100% (39/39), 12.36 KiB, done. Resolving deltas: 100% (5/5), done. $ cd Android-Exercise $ git branch * master $ git checkout -t -b develop origin/develop Branch develop set up to track remote branch develop from origin. Switched to a new branch 'develop' $ git branch * develop master $
で、いきなり release なブランチ作るか。
$ git checkout -b release-1.0 Switched to a new branch 'release-1.0' $ git branch develop master * release-1.0 $
で、いくつか commit したいので少しづつ。まず TextView を Button にする。
$ git diff diff --git a/res/layout/main.xml b/res/layout/main.xml index 3a5f117..dcddcd7 100644 --- a/res/layout/main.xml +++ b/res/layout/main.xml @@ -4,7 +4,8 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" > -<TextView +<Button + android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" $
これで、add して commit します。ちなみにこの release なブランチは一人で対応してるの前提って事で branch したり merge したりは略します。
$ git add res/layout/main.xml $ git commit -m 'TextView to Button' [release-1.0 ec575b4] TextView to Button 1 files changed, 2 insertions(+), 1 deletions(-) $
で、ボタンなソレを盛り込んでみました。
$ git diff diff --git a/src/jp/shuri/yamanetoshi/androidexercise/AndroidExercise.java b/src/jp/shuri/yamanetoshi/androidexercise/AndroidEx index d461930..998040b 100644 --- a/src/jp/shuri/yamanetoshi/androidexercise/AndroidExercise.java +++ b/src/jp/shuri/yamanetoshi/androidexercise/AndroidExercise.java @@ -3,6 +3,9 @@ package jp.shuri.yamanetoshi.androidexercise; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; +import android.widget.Button; +import android.view.View.OnClickListener; +import android.widget.Toast; public class AndroidExercise extends Activity { /** Called when the activity is first created. */ @@ -13,5 +16,14 @@ public class AndroidExercise extends Activity { webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("file:///android_asset/index.html"); setContentView(webView); + + Button btn = (Button)findViewById(R.id.button); + btn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + Toast.makeText(AndroidExercise.this, "test", Toast.LENGTH_SHORT).show(); + } + }); } } \ No newline at end of file $
動くかどうかは知りませんが、commit して merge してみる。
$ git add src/jp/shuri/yamanetoshi/androidexercise/AndroidExercise.java $ git commit -m 'modify AndroidExercise.java' [release-1.0 acb1bd7] modify AndroidExercise.java 1 files changed, 12 insertions(+), 0 deletions(-) $
で、merge してみます。
$ git branch develop master * release-1.0 $ git checkout master Switched to branch 'master' $ git merge release-1.0 Updating 172e974..acb1bd7 Fast-forward .classpath | 2 +- AndroidManifest.xml | 3 +- assets/index.html | 22 ++++++++++++++++++++ res/layout/main.xml | 3 +- .../androidexercise/AndroidExercise.java | 18 +++++++++++++++- 5 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 assets/index.html $
しまった。fast forward されたorz
でも master ブランチに merge は可能な事が確認できますた。
やり直してみる
ええと、以下かな。
$ git log --graph * commit acb1bd70d64af49933d9c11ccabbed578c6bb791 | Author: Toshiaki Yamane <t.yamane@lexues.co.jp> | Date: Tue Jan 11 20:29:20 2011 +0900 | | modify AndroidExercise.java | * commit ec575b44de746bc55909daf56a1c67bcfeca6be3 | Author: Toshiaki Yamane <t.yamane@lexues.co.jp> | Date: Tue Jan 11 20:20:08 2011 +0900 | | TextView to Button | * commit de7c9413fdff86cfad8219b62629d3cf75fee6ad | Author: rms <yamanetoshi@gmail.com> | Date: Tue May 4 17:29:00 2010 +0900 | | implement google map | * commit 1698143ad4df120af3afe04d4b46e8bbd16cab3a | Author: rms <yamanetoshi@gmail.com> | Date: Tue May 4 16:51:47 2010 +0900 | | modify .classpath by eclipse | * commit 172e974076a3df81360e47015c504bc1dbab5e0e Author: rms <yamanetoshi@gmail.com> Date: Tue May 4 16:36:35 2010 +0900 first commit $ git reset --hard HEAD~2 HEAD is now at de7c941 implement google map $
戻ったので再度 merge してみます。
$ git merge --no-ff release-1.0 Merge made by recursive. res/layout/main.xml | 3 ++- .../androidexercise/AndroidExercise.java | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletions(-) $
を、なんとなく良いカンジ。
$ git log --graph * commit c117639ee3d6eaaf7687a355d72ead8e89e6f604 |\ Merge: de7c941 acb1bd7 | | Author: Toshiaki Yamane <t.yamane@lexues.co.jp> | | Date: Tue Jan 11 20:35:45 2011 +0900 | | | | Merge branch 'release-1.0' | | | * commit acb1bd70d64af49933d9c11ccabbed578c6bb791 | | Author: Toshiaki Yamane <t.yamane@lexues.co.jp> | | Date: Tue Jan 11 20:29:20 2011 +0900 | | | | modify AndroidExercise.java | | | * commit ec575b44de746bc55909daf56a1c67bcfeca6be3 |/ Author: Toshiaki Yamane <t.yamane@lexues.co.jp> | Date: Tue Jan 11 20:20:08 2011 +0900 | | TextView to Button | * commit de7c9413fdff86cfad8219b62629d3cf75fee6ad | Author: rms <yamanetoshi@gmail.com> | Date: Tue May 4 17:29:00 2010 +0900 | | implement google map | * commit 1698143ad4df120af3afe04d4b46e8bbd16cab3a | Author: rms <yamanetoshi@gmail.com> | Date: Tue May 4 16:51:47 2010 +0900 | | modify .classpath by eclipse | * commit 172e974076a3df81360e47015c504bc1dbab5e0e Author: rms <yamanetoshi@gmail.com> Date: Tue May 4 16:36:35 2010 +0900 first commit $
こゆ事してると何か作りたくなってきますな。Git がモチベーションの源とゆーのも微妙なので、スマホをげとしたら自分アプリをこつこつ作ろう、と思ってます。ふふふふ。