18
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Visual Studio 2015とGithubでGitflow(No.2)

Last updated at Posted at 2016-01-24

はじめに

本稿はリポジトリにGithubを、クライアントツールとしてVisual Studio 2015を、構成管理ワークフローにGitflowを利用する場合の、主にVisual Studioの利用方法を記載した記事になります。
GitのプラグインとしてのGitflowには一切触れる予定はありませんのでご注意ください。

本稿は「Visual Studio 2015とGithubでGitflow」の第二回目になります。
一回目のエントリーは以下になります。

Visual Studio 2015とGithubでGitflow(No.1)

前回の流れは以下の通りでした。

  1.  Githubへリポジトリの作成
  2.  ローカルへクローンの作成
  3.  developブランチの作成
  4.  フィーチャーブランチの作成
  5.  フィーチャーブランチへリソースの作成とローカルリポジトリへのコミット
  6.  ローカルリポジトリのコミットのリモートへのプッシュ

今回はGitflowのキーとなる「プルリクエスト」から入り、以下の流れで記載します。

  1. プルリクエストの送信
  2. プルリクエストのレビュー
  3. プルリクエストのマージ
  4. フィーチャーブランチの削除
  5. プルリクエストの却下
  6. リリースとホットフィックス

前提条件

一応前提条件を

  • GitクライアントツールとしてVisual Studio 2015 Communityエディションを利用します
  • 事前にVisual Studio 2015 Communityエディションがインストールされているものとします
  • リポジトリとして、Githubを利用します
  • 事前にGithubのユーザ登録が完了していることを前提とします
  • Gitflowのワークフローに対する知識を一定以上所持している方が読む前提として記述しています
  • Gitflowのワークフローに関しては、以下のサイトを参考にさせていただきました!

Atlassian社さん Gitチュートリアル Gitワークフロー

プルリクエストの送信

本章ではGitflowの醍醐味でもある、「プルリクエスト」を送ります。
それでは、Githubのページを開いてください!

。。。そうなんです、「Visual Studio~」と銘を打っておきながら、第二回の今回はVisual Studioではなく、Githubを直接操作するところから始まります。
というのもプルリクエストは、もともとGitの標準機能ではなく、Githubが提唱してGitの拡張サービスとしてホスティングサービス側(Github側)に構築されたものだからです。
現在では、他のホスティングサービス(BitBucket)などでも一般的に採用されており、Github以外でも利用可能なケースが多いです。
ただ、Visual StudioからGithubへプルリクエストを送る機能は提供されていないため(拡張機能として提供されているかもしれませんが)、今回はGithubのホームページから直接プルリクエストを送ります。

それではGithubの該当リポジトリのページを開いてください。
以下の図の赤枠で括っている「New pull request」を押下してください。
image

今回の変更は、新しいソリューションを追加したことです。
その追加は、「develop-create-new-solution」ブランチで実施しました。
上記のブランチの追加内容を、開発のベースとなる「develop」ブランチにマージしてもらうよう、プルリクエストを送ります。
このため、以下の画面の「base」側のコンボボックスで「develop」を、「compare」側のコンボボックスで「develop-create-new-solution」を選択してください。

image

で、下に見えているLeave a commentにプルリクエストの内容を記載しましょう。

No-0001.png

で、これらの下のほうを見ていくと、developブランチとdevelop-create-new-solutionブランチを比較した差異が表示されているはずです。

No-0002.png

このままだと、全ファイルの差分が表示されていて見づらかったりしますが、「6 change files」と表示されている個所をクリックすると、変更のあったファイル一覧が表示されます。

No-0003.png

変更リストと変更内容を行ったり来たりしながら差異を確認すると良いでしょう

確認後、問題なければプルリクエストを送ります。
以下の画面の「Create pull request」ボタンを押下しましょう。

image

これでプルリクエストの送信は完了です。

プルリクエストのレビュー

本章からは立場を変えて、プルリクエストを送られた側の視点で記載します。

プルリクエストが送られると、Githubのリポジトリのトップに以下のように表示され、プルリクエストがあることがわかります。
image

開いてみると、以下のように1件のプルリクエストがあることが見て取れます。

No-0006.png

では、該当のプルリクエストをクリックし、開いてみましょう。

image

なかなかふざけたコメントですね。
何の目的でどんなソリューションを追加したのか書きやがれって話です。

まぁそこはさておき赤枠の部分を見てください。
No-0008.png

察するに(てか書いてありますが)、「develop-create-new-solution」ブランチを「develop」ブランチにマージしてくれというリクエストのようです。
このままGithub上でマージすることもできるのですが、あげられたプルリクエストの内容をレビューしてからマージするべきです。
プルリクエストを送るとき、レビューするとき、それぞれチームで決めたチェックリストに従って、必要要件の確認をすると良いかもしれませんね。(コードが規約を満たしていること、コンパイルが通ること、テストコードが存在し正しく実行されること。。。etc.)
今回はどういったチェックリストが必要かといった内容については割愛します。

では、Visual Studioを開き、「チームエクスプローラー」を開いてください。

No-0009.png

「ブランチ」ボタンを押下します。
すると、下のように見えるはずです。

No-0001.png

レビュアーは、まだ対象のブランチをローカルに取得していないため、「develop-create-new-solution」ブランチは「remotes/origin」側にだけ、存在し、ローカルには存在しません。
これを右クリックし、以下のように「チェックアウト」を選択します。

No-0002.png

すると、ローカルにチェックアウトされましたね!

No-0003.png

では、「チームエクスプローラー」の上部にある「ホーム」ボタンを押下してください。

No-0004.png

すると、ソリューションの欄に、追加されたソリューション「DrawingExt.sln」が表示されているはずなので、それを開き(ダブルクリックし)ましょう。

No-0005.png

うまくいけば、以下のように追加されたソリューションが開かれるはずです。
開かれなかったら。。。なんでかな?開かれるはず!

No-0006.png

では存分に心行くまでレビューを実施してください。
問題ありませんでしたか?
ここでは問題なかったことにします。
問題があった場合は、別途末尾のほうに記載します。

プルリクエストのマージ

では、プルリクエストに問題なかったものとして次へ進めます。
次のステップはフィーチャーブランチ(今回は「develop-create-new-solution」)をデベロップ(develop)ブランチへマージします。

手順としては次のように実施します。

  1. ローカルの「develop-create-new-solution」ブランチから、ローカルの「develop」ブランチへのマージ
  2. ローカルの「develop」ブランチのリモートへのプッシュ

ではまずは、「チームエクスプローラー」のホームを開き、「ブランチ」ボタンを押下してください。

No-0007.png

ブランチ画面が開かれたら、マージ先のブランチをチェックアウトします。
今回の場合、マージ先は「develop」ブランチですね。

No-0009.png

「develop」ブランチをチェックアウトしたら、次はマージ元の「develop-create-new-solution」ブランチを右クリックして「マージ元」を選択します。

No-0010.png

すると以下のような画面が開かれます。
「マージするブランチ」に変更があった「develop-create-new-solution」ブランチが表示されています。
また、「マージ先となる現在のブランチ」に「develop」ブランチが表示されています。
これらを確認したうえで「マージ」を押下します。

No-0011.png

これでローカルでのマージ作業が完了しました。
次は、ローカルの「develop」ブランチをリモートへプッシュします。

「チームエクスプローラー」のホームを開き、「同期」ボタンを押下します。

No-0012.png
すると、同期画面が開かれ「出力方向のコミット」に「ソリューションの新規追加」が表示されているはずです。
そうしたら「プッシュ」を押下すると。。。

No-0013.png

以下のようにログが出力されて、リモートの「develop」ブランチへ変更がマージ(プッシュ)されました。

No-0014.png

では、Github側で本当にマージされているか確認しましょう。
Githubのリポジトリトップを開くと次のように表示されているはずです。

image

赤枠の下のブランチを「develop」ブランチへ切り替えてみましょう。

No-0012.png

無事にソリューションが追加されていることが確認できましたね!
これにてフィーチャーブランチのデベロップブランチへのマージは完了です。

フィーチャーブランチの削除

さて、これまで新しいソリューション追加のためフィーチャーブランチ「develop-create-new-solution」を利用してきましたが、もう不要なので窓から投げ捨てましょう。

「チームエクスプローラー」 > 「ブランチ」を開き、ローカルの「develop-create-new-solution」ブランチを右クリックして「削除」を押下します。

No-0013.png

続いて、リモートの「develop-create-new-solution」ブランチを右クリックし「リモートからブランチを削除」を押下します。

No-0014.png

確認ダイアログが開かれるので「はい」を押下します。

No-0015.png

以上でプルリクエストの処理はすべて完了になります。
Githubのリポジトリを開いてみましょう。

リポジトリのマージのためにOpenされたプルリクエストが、マージされたことで自動的にCloseされていることがわかります。

No-0016.png

プルリクエストの却下

ここまでのケースではプルリクエストを受け入れましたが、場合によってはプルリクエストを却下するケースもあるでしょう。
その場合、Githubのリポジトリから対象のプルリクエストを開きます。

image

適切なコメントを入力し、「Close and comment」を押下しましょう。
なお誤ってCloseしても再度Openできます。
まぁ、再度プルリクエストを送ってもらってもいいですけど。

リリースとホットフィックス

あとは大きなトピックとして、リリース作業とホットフィックスがあります。
が、それらの作業方法は、すべてこれまで説明してきた

  1. 新しいブランチの作成
  2. 新しいブランチ上での作業の実施
  3. 作業内容のローカルへのコミット
  4. リモートブランチへのプッシュ
  5. プルリクエストの発行
  6. プルリクエストのレビュー
  7. プルリクエストのマージ

で全て実施できます。
ブランチを作る元ブランチと、ブランチの目的、ブランチのマージ先が異なるだけです。
と言う訳で、ここまででVisual Studioを使ってGithub上でGitflowを適用する場合の、「なんのトラブルもなかった」場合の流れを説明できたと思います。
実際にはチームメンバー間で同一リソースへの編集が衝突した場合のマージ作業やリベースといった作業が必要になってきますが、その話はまた別途書きたいと思います。
ではまた、その時にお会いしましょう!

18
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?