連載
» 2015年06月30日 05時00分 公開

連載:TFVC vs Git:第3回 GitとTFVCのブランチとマージ (3/6)

[亀川和史,著]

ブランチの編集

 Featureブランチにチェックアウトした後、上述の手順でNuGetパッケージの更新を行う。紙面の都合上、ここでは一括で行ったものとするが、すでにリリース済みのソフトウェアにパッケージの更新を行う場合、前述の通り、一つずつ慎重に更新するべきだ。

 ブランチの運用としては、前述の通り、VS Onlineのリモート側にブランチを作成してからローカルにクローンする方法と、VSでローカルのブランチを作成してからリモートにプッシュしてマージするという方法がある。手順が少なくなるので、今回はローカルでブランチを作って、サーバーにプッシュ、マージを行う手順で紹介する。

本稿で紹介するGitチームプロジェクトでのブランチ/マージの手順 本稿で紹介するGitチームプロジェクトでのブランチ/マージの手順
  (1)VS Online上のリモートリポジトリからローカルにmasterブランチをクローン。
  (2)ローカルでFeatureブランチを作成。
  (3)ローカルで作成したFeatureブランチをリモートリポジトリへプッシュ。
  (4)リモートリポジトリのmasterブランチに、Featureブランチをマージ。

 作成したローカルのFeatureブランチでNuGetパッケージの更新を行い、以下の画面のようにチームエクスプローラーの[分岐]ページからサーバーに発行すると、サーバーにFeatureリポジトリが作成される。

作成された分岐の発行 作成された分岐の発行
  (1)ブランチをVS Onlineにプッシュする。
  (2)新しいブランチを作成する。
  (3)ブランチをマージする。
  (4)ブランチの履歴を表示する。

 [分岐]ページで[発行されていない分岐]メニューから[分岐の発行]をクリックすると、VS Onlineにブランチがプッシュされる。発行されたブランチは、VS Onlineでは[CODE]ページの[Branches]タブで確認できる(以下の画面)。

VS Onlineで発行された分岐の確認 VS Onlineで発行された分岐の確認
  (1)ブランチ一覧。
  (2)ブランチを作成したメンバー一覧。

 Webポータルでブランチの一覧を確認するとFeatureブランチが作成されていることを確認できる。

Gitのマージとプルリクエスト

 ブランチを頻繁に使うGitではマージも日常的に使われている。GitHubではプルリクエスト(pull request)も日常的に使用する重要な機能だ。ぜひ理解して使いこなそう。

 プルリクエストとは、VS OnlineやGitHubのようにホスティングサービスがGitのプルの仕組みを使い、「外部のリポジトリに対して、自分のリポジトリで行った変更を受け入れてもらうように依頼する」という機能だ。

 VS Online同様、Gitをサービス提供しているGitHubの場合、コミット権を持っていないリポジトリを自分のリポジトリにクローンしてからソースコードを編集し、元のリポジトリへプルリクエストを行い、編集結果をマージしてもらうといった運用が行われている。

 VS Onlineでもブランチ単位でセキュリティを掛けられるので、masterブランチには特定のメンバー以外にコミット権を与えず、他のメンバーは必ずプルリクエストを作成してマージするという、GitHubと同じフローで運用を行うことが可能だ。

 VS Onlineのチームプロジェクトのホームから右上にある歯車アイコンをクリックしてプロジェクトメニューを表示して、[Version Control]タブをクリックするとセキュリティの設定を行える。

VS Onlineのセキュリティ設定 VS Onlineのセキュリティ設定
  (1)セキュリティを設定するブランチ。
  (2)ブランチのセキュリティを設定するグループ/ユーザーの一覧。
  (3)選択したユーザー、グループもしくは権限に対するセキュリティ設定項目。
  (4)権限の削除、保存、取り消しを行う。

 具体的には上の画面の(3)にある[Contribute]の権限を[Deny]に設定すると、そのユーザーもしくはVSO Groupはクローンできるが、プッシュできなくなる。しかし、ローカルリポジトリにブランチを作成して、VS Onlineのリモートリポジトリへプッシュすることは可能なので、リモートリポジトリからのプルリクエストは可能になる。

[Contribute]権限を[Deny]にした場合 [Contribute]権限を[Deny]にした場合
  (1)リモートリポジトリからのクローンは可能だが、プッシュはできなくなる。
  (2)ローカルにブランチを作成して、
  (3)それをリモートリポジトリにプッシュして、
  (4)プルリクエストを発行して取り込んでもらうことは可能。

 しかし、どんなプルリクエストでも受け入れてしまっては問題が起きるので、ブランチ単位でプルリクエストを受け入れるポリシーを設定できるようになっている。これは上述の[Version Control]タブの[Branch Policies]タブで設定する。

Gitのブランチポリシー設定 Gitのブランチポリシー設定
  (1)プルリクエスト時にビルドを行うかどうかの設定と、使用するビルド定義を指定する。
  (2)コードのレビューを最低何人が行うかの指定。
  (3)ブランチの特定の階層のフォルダー以下に対して特別なレビュワーもしくはグループを指定する。
  (4)変更を保存する。
  (5)変更を取り消す。

 ブランチポリシーとして設定可能な項目は「チームメンバーがプルリクエストを作成したとき、指定されたビルドを実行する」と、「コードレビューの最低人数の指定」だ。

 さらに細かく、どの階層のソースで有効にする/特定のメンバーやグループを追加するなども指定可能だ。

 特にレビューを厳しく実施したいとか、複数のチームに影響するような共通モジュールに対しては、そのコードと関係のありそうなメンバーをブランチポリシーのコードレビュワーに設定すればいいだろう。

 プルリクエストはVSからは作成できないため、VS OnlineのWebポータルからプルリクエストを作成する必要がある。

プルリクエストの作成 プルリクエストの作成
  (1)プルリクエストを作成する。
  (2)作成されたプルリクエスト一覧を表示する。
  (3)作成されたプルリクエストが表示される。

 [New Pull Request]ボタンをクリックすると、プルリクエストが作成され、それが右側のペーンに表示される。作成されたプルリクエストは自分のもの以外にも、リポジトリ単位で確認できる。対象のプルリクエストをダブルクリックすると、詳細画面が表示される。

作成されたプルリクエスト 作成されたプルリクエスト
  (1)プルリクエストのタイトルや詳細情報を表示および、編集する他、レビュワーを追加指定する。
  (2)コメントを追加する。
  (3)プルリクエストを取り込む。
  (4)プルリクエストを捨てる。
  (5)レビュワーを追加する。

 競合が発生していない場合、ブラウザー上で[Complete Pull Request]ボタンを押すだけで、マージが完了する。競合が発生している場合、ローカルで競合を解決した上で、再度プッシュ/プルリクエストを行う。

ローカルブランチでのマージの衝突処理 ローカルブランチでのマージの衝突処理
  (1)マージを実行する。
  (2)ファイルの比較を行う。
  (3)リモートリポジトリのファイルを反映する。
  (4)ローカルリポジトリのファイルを維持する。

 競合が発生した場合、マージ先のブランチ(今回の場合はmasterブランチ)をプルして、ローカルのVSで競合を解決してから、再度VS Onlineにプッシュ、プルリクエストを作成しよう。

 リモート側の修正を残すか、ローカル側の修正を残すか選択後、コミットおよび、同期を行えば、リモートリポジトリに変更が反映される。

 ブランチやマージの履歴はVSでもVS Onlineでも参照できる。VS 2013では少し分かりづらいが、VS 2015ではProfessional Editionでも使用可能になったCode Lensと組み合わせることにより、視覚化が強化される。

 最後にVS OnlineのGitチームプロジェクトにおけるブランチの特徴をまとめておこう。

VS OnlineのGitチームプロジェクトにおけるブランチ/マージの特徴

  • ブランチはリモートリポジトリにもローカルリポジトリにも作成でき、これを適宜、masterブランチなどにマージしていく(分散型)
  • 細かな修正の単位でブランチを作成し、ブランチを切り替えながら作業していく
  • Git Flow(master/release/develop/feature/トピックなど、コード修正の種類に応じたブランチを作成)
  • コミット/マージなどに関連した機能が豊富に用意されている。ただし、これらをVSから使用するには拡張機能が必要になる
  • VS Online/VSのいずれからでもブランチは作成可能。VSの場合はチームエクスプローラーの[分岐]ページを使用する
  • チームプロジェクトでブランチ単位にセキュリティポリシーを設定することで、特定のリポジトリに直接プッシュを実行できるメンバーを限定し、それ以外のメンバーはプルリクエストを発行することで、コードの取り込み(プル)を要求するといった運用が可能。ただし、プルリクエストはVS Online上で作成する必要がある
  • マージ時に衝突が発生した場合には[競合の解決]ページで解決する

 次に、TFVCでブランチを作成する手順を見てみよう。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。