JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■応用の森 GitBucketのPull Requests
Eclipseでのファイル修正
Pull Requestsの機能は、Gitの標準機能ではなく、GitHubやGitBucketで実装された拡張機能ですが、
何が有利(便利)なのか、実際やってみないとあまり実感がわかないので、実際にやってみましょう。
まず、前節まででGitBucketで作成された mybrunch でEclipseの適当なファイルを編集してみます。
今回は、error.html のメッセージをちょこっと修正してみました。
ソース修正
ナビゲータのファイルリストの error.html に修正マーク(>)が表示されています。
これをGitBucketにプッシュします。
ブランチのプッシュ
「リモートのブランチへプッシュ」ダイアログボックスが表示されるので、
内容を確認してそのまま「次へ」ボタンをクリックします。
リモートのブランチへプッシュ
「プッシュ確認」ダイアログボックスが表示されるので、
内容を確認してそのまま「完了」ボタンをクリックします。
プッシュ確認

Eclipse側の作業は以上です。
GitBucket側の状態を確認してみましょう。

GitBucketの変更履歴に、
「arimodoki pushed to mybrunch at arimodoki/myLabo」というメッセージが追加されています。
リモートのmybrunchへのプッシュは成功しているようです。
GitBucketプッシュ確認
Pull Requestsの実施
ここまでで、EclipseからGitBucketにプッシュされた変更は、GitBucketの「mybrunch」ブランチに対する変更で、
「master」ブランチにはまだ何の変更も・影響も及ぼされません。
「mybrunch」ブランチの変更内容を、「master」ブランチに適用(マージ)するために、
Pull Requests を行います。

GitBucketの左サイドメニュー「Pull requests」を選択します。
GitBucket Pull Requests
表示された画面右側の緑色の「New pull request」ボタンをクリックします。
下のような画面が表示されるので、一番右側の(compare)プルダウンメニューから「mybrunch」を選択します。
compareブランチ選択
この状態を簡単に説明しておくと、右側(compare)ブランチを、
左側(base)ブランチにマージしますよ。という意味合いになります。
masterブランチにマージするべき修正・変更がmybrunchにあれば、
プルダウンメニューを選択した瞬間に、
すぐ下に、緑色の「Create pull request」ボタンが表示されます。
プルリクエスト作成
画面の下の方には、masterブランチの変更前(赤色)と、
mybrunchの修正後(緑色)の変更部分が表示されています。
内容を確認して、「Create pull request」ボタンをクリックします。
メッセージ入力画面が表示されるので、pull request メッセージを何か入力して、
画面右下の「Create pull request」ボタンをクリックします。
メッセージ入力
マージ確認画面が表示されるので、「Merge pull request」ボタンをクリックします。
マージリクエスト
しつこいようですが(笑)最終確認ボタン、「Confirm merge」ボタンをクリックします。
マージ確認
以上で、「mybrunch」ブランチから「master」ブランチへのマージが完了しました。

最後に、ちゃんと「master」ブランチが変更されているか確認しておきましょう。
GitBucket左サイドメニュー「Branches」クリックして、右側で「master」ブランチを選択します。
masterブランチ確認
内容が正しく修正されていれば問題ありません。

GitBucketでのPull Requestsの作業は以上となります。
ユーザーブランチからmasterブランチへのマージ処理は、gitのmergeコマンドを使ってもできますが、
Pull Requestsは、これをGUIベースで行えると思ってもらえばわかりやすいかもしれません。
(ちょっと、違う気もするが、、、、)
まぁ、とにかくPull Requestsという一操作が加わる事で、ユーザーブランチの変更をmasterブランチにマージする際にも
変更部分の差分を一目瞭然で確認することができるので、競合が発生しにくいという大きな利点があります。


Pull Requestsは、GitBucket側で行うので、Eclipse側は基本的には「mybrunch」をプッシュするだけでいいのですが
時々、「master」ブランチを、Eclipse上の「mybrunch」に同期する必要があるので、
最後に、Eclipseの「master」ブランチ同期について解説しておきます。
Eclipseの「master」ブランチ同期処理
Eclipseで修正したりソースファイルは、Pull Rerequestsを使って、
GitBucketの「master」ブランチに同期することはできました。
ただ、このプロジェクトでは、自分だけでなく、複数のメンバーが「master」ブランチにマージをかけるので、
「master」ブランチは常に最適な状態(最新の状態とは違う)に保たれています。
一方、自分のEclipse上の「mybrunch」ブランチは、自分が修正したものは常に最新に保たれていますが、
他のメンバーが変更したリソースは一切同期していないため、masterより古い状態になっている可能性があります、
もし間違ってそのソースを修正して、Pull Requestsを実行すると、競合が発生してプッシュできなくなってしまします
こうなると、GitBucket上ではにっちもさっちもいかなくなり、
コマンドラインレベルで、リポジトリのリバートかけたりと、大変なことになるので注意しましょう。
話がそれましたが、そんな悲しい思いをしないために、一つ鉄則を伝授しておきます。

朝出社して、Eclipseを起動し、プロジェクトの修正を始める前に、
まず、Eclipseプロジェクトのブランチが、「mybrunch」ブランチになっていることを確認して、
Eclipseプロジェクトをマウス右クリックでメニューを表示させ、
「チーム」ー「マージ」で表示されたダイアログボックスの上段にある
「リモート・トラッキング」ツリーの内の「origin/master」ノードを選択して
「マージ」ボタンをクリックします。
これで、ローカル「mybrunch」ブランチのリソースは、
リポジトリ上の「master」ブランチの内容でマージされます。
※)もちろん「master」ブランチよりソース改造が進んでいる部分は残っているので心配無用です。

以降は、いつも通り自分のローカルブランチで開発作業を行います。

そして、本日の作業が終わるときに、「mybrunch」をGitBucketにプッシュして、
GitBucketでPull Requestsを行う(もしくはPull Requests担当者に通知する)

この手順をしっかり守れば、ちょっとやそっとじゃ競合は発生しないはず。

、、、、なんですが、所詮人間のやる事。一度は必ず悲しい思いを経験するんですよねぇ(はぁ)