Bitbucket + EGit^6
開発演習では、コーディング・テストが実質1週間位しかないので、各メンバーがmasterを直接修正してプッシュする方式でいい気がする。おそらくコンフクリクトが多発してその解消で手一杯になるだろうけど、目的である「ソース共有」はできるようになる。
ただgitに慣れてコンフリクトが減ってきたら、ブランチを取り入れるのもアリ。プルリクエストまでやるかどうかわからないけど、さすがに実務でもブランチは使うだろうし。しかしブランチの考え方とか、ブランチの粒度をどうするかは?ケースバイケースな気がする。
開発演習でブランチを取り入れるなら、開発作業を各メンバーでクローズできる範囲かつ半日~1日以内で終わりそうな粒度に分割して、それをブランチにするか?たとえば
位がいいのでは?その判断は各チームで考えてもらうとして、ここにはブランチを使った開発の手順を記載する。流れとしては以下のようになる。
# | 作業項目 | 備考 |
---|---|---|
1 | ブランチの作成・切り替え | |
2 | ソースコードの編集・テスト・コミット | ここではプッシュしない |
3 | マージ | プッシュはこの中で行う |
4 | ブランチ削除 |
1. ブランチの作成・切り替え
まず最初の状態を確認する。Gitプロパティのヒストリータブをみると以下のようになっている(何も表示されていないときは、プロジェクト名 右クリック > [表示(W)] > [ヒストリー]を選択)。
先頭行にmaster, origin/master, HEADが表示されているから、これが最新だということがわかる。
- master
- デフォルトのブランチ名
- origin/master
- originはリモートリポジトリのこと。origin/masterは、リモートにプルされているmasterブランチのこと。
- HEAD
- 作業しているブランチの先頭
ではprocyonさんが「ItemDao.javaへsave()メソッドを実装する」作業をするためのブランチとして「save()_impl」を作るとしよう。手順は以下の通り。
JavaEEパースペクティブのプロジェクトエクスプローラでプロジェクト名 右クリック > [チーム(E)] > [切り替え(W)] > [新規ブランチ(N)]を選択。
ブランチ作成ダイアログに以下を入力し、[完了(F)]クリック。
- ブランチ名:save()_impl
- プッシュおよびプルのアップストリームを構成する:クリア
- 新規ブランチをチェックアウトする:チェック
プロジェクト名の右側に切り替わったブランチ名(=save()_impl)が表示される。
もし切り替わっていなければ、「新規ブランチをチェックアウトする」のチェックし忘れと思われる。その場合は、下記「4. ブランチ削除」でブランチを削除してやり直すか、以下のようにプロジェクト名 右クリック > [チーム(E)] > [切り替え(W)] > [ブランチ名]を選択してやる(=チェックアウト操作)。
ここでヒストリータブを見ると、先頭行に作成したブランチも(=save()_impl)が表示されることがわかる。つまりこの段階では、 作成したブランチはmasterと同じ内容、ということになる。
2. ソースコードの編集・テスト→コミット
ソースコードを編集して、テストで意図したとおりになっていることを確認したらコミットまでする。ここではプッシュしないので注意。
ヒストリータブを見ると、masterとsave()_implが分かれたことがわかる。
次のマージではブランチの内容をmasterへ取り込み(=マージ)、それをorigin/masterへ反映(プッシュ)する。
3. マージ
まず、操作対象を「変更を取り込む側のブランチ(=master)」へ切り替える。 プロジェクト名 右クリック > [チーム(E)] > [切り替え(W)...] > [master]を選択。
プロジェクトの右側を見ると切り替わったことが確認できる。
次にマージするブランチ(=save()_impl)を選択する。
プロジェクト名 右クリック > [チーム(E)] > [マージ(M)...]を選択。
ローカルのsave()_implをクリックして、[マージ(M)]
マージ成功。
プロジェクトの右側を見ると↑1と表示されており、リモートに送っていない変更が1件あることがわかる。
ヒストリータブを見ると、masterとsave()_impleの内容が一致したけど、origin/masterとは異なっていることがわかる。
次にmasterの内容をリモートリポジトリ(=origin/master)へ以下の操作で反映する。
プロジェクト名 右クリック > [チーム(E)] > [アップストリームへプッシュ(P)]を選択。
これでブランチで作業した内容がリモートリポジトリへ反映できた。
ヒストリタブをみると、master, save()_impl, origin/master, HEADが先頭行に表示されている。このうちリモートリポジトリへ作業内容を反映できたら、そのブランチは不要なので削除する。
4. ブランチ削除
プロジェクト名 右クリック > [チーム(E)] > [拡張(V)] > [ブランチの削除(D)...]を選択。
削除するブランチ(=save()_impl)を選択して、[OK]クリック。
これでヒストリータブの先頭行は、最初と同じようにmaster, origin/master, HEADが表示されている。これで完了。