第3回 GitとTFVCのブランチとマージ:連載:TFVC vs Git(5/6 ページ)
前回までで、TFVCとGitの基本的な操作方法の違いを理解していただけたと思う。今回は第1回でも紹介したリポジトリの考え方や実際のリポジトリの運用、同じでも少し異なる用語の解説を実際の操作で紹介する。
ブランチの編集
次は作成したブランチを編集してみよう。新しいブランチのソース編集を行う場合、ソース管理エクスプローラーで対象となるブランチのフォルダーを右クリックして、コンテキストメニューから[最新のソースコードをダウンロード]を実行する。
ブランチしたソースコードはクライアントの作業フォルダーにダウンロードされるので、そのソリューションをオープンして必要な変更を行う(今回は上述したNuGetパッケージの更新を行ったものとする)。なお、ブランチ作成後は作業フォルダーが変更されるだけで、通常のプログラム作成と異なるところはない。
ブランチと自動ビルド
VS Onlineで自動ビルドを構成していたソリューションをブランチした場合、自動ビルドは複製されない。VSの標準機能およびVS OnlineのWebポータルではビルド定義を複製できないが、無償の拡張機能であるCommunity TFS Build Manager VS2013を使用すれば既存のビルド定義を複製できる。
複製したビルド定義の対象ソリューションのみ変更すれば比較的少ない手間でビルド定義を作成できる。また、この拡張機能は他にも便利な機能があるので、自動ビルドを設計するような人はインストールしておくことをお勧めする。
上述したようにNuGetパッケージを更新すると、派生元との差分ができているはずだ。差分をマージするまでの間に派生元のブランチが全く変更されていなければ何の問題もないが、実際はブランチでの作業中に、派生元でもバグ修正などの更新が行われることが普通だ。
大元のブランチには、Featureブランチ以外にもDevelopブランチやHotfixブランチから修正されたコードがマージされている可能性がある。TFVCではこういったブランチ/マージの状況はソース管理エクスプローラーで可視化できる。
ソース管理エクスプローラーでブランチを右クリックしてコンテキストメニューの[履歴の表示]を選択するか、ツールバーの[履歴]ボタンをクリックすると、選択したブランチのチェックイン履歴が表示される。
ブランチの履歴
(1)変更セットの詳細をチームエクスプローラーに表示する。
(2)フォルダーの比較ダイアログを表示して、任意の場所のフォルダーと比較する。
(3)変更セットのトラッキングを行う。
(4)選択した変更セットをダウンロードする。
(5)変更セット一覧。
調べるチェックインを選択して、ツールバーあるいはコンテキストメニューから[変更セットのトラッキング]を実行すると、変更セット(チェックインで登録されたファイル群を「変更セット」という)を視覚化したものが表示される。
分岐の視覚化設定
(1)視覚化の対象とするソリューションを親子関係から選択する。
(2)クリックすると表示から除外するパスを選択するエディットコントロールを表示する。
(3)表示される分岐の選択を行う。
(4)現在の設定で視覚化を実行する。
(5)トラッキングを中止する。
対象のソリューションを選択して、[視覚化]ボタンをクリックすると、ブランチの状態をグラフ化したものが表示される。
変更セットのトラッキング
(1)現在表示されている状態をイメージで保存する。
(2)現在表示されている状態をクリップボードにコピーする。
(3)トラッキングを再実行する。
(4)分岐の階層を表示する。
(5)階層のトラッキングを表示する。
(6)現在の分岐からトラックされている分岐のみが表示される。
(7)選択した変更セットの詳細。
(8)ソース管理エクスプローラーで開く。
(9)選択した分岐のプロパティを表示する。
(10)マージを実行する。
(11)指定したフォルダーと比較する。
マージを行う
ブランチの編集を行ったので、派生元にマージしてみよう。すぐにマージを実行してもいいが、まずは比較を行い、予定外の編集が行われていないか確認しておこう。
マージを行うときや、差分ブランチ派生元のフォルダーと比較を行い、フォルダーとソース管理エクスプローラーで、分岐元のフォルダーと比較を行ってみよう。ソース管理エクスプローラーで比較元となるブランチを選択して、コンテキストメニューの[比較]かツールバーの[フォルダーの比較]を選択する。すると、以下のような画面が表示される。
分岐との比較
(1)比較対象ソースパス(ローカルでもサーバーでも指定可能)。
(2)比較するパスをローカルかサーバーか選択してから、参照するダイアログを表示する。
(3)ソースのバージョンを選択する。
(4)比較対象ターゲットパス(ローカルでもサーバーでも指定可能)。
(5)比較するパスをローカルかサーバーか選択してから、参照するダイアログを表示する。
(6)ターゲットのバージョンを選択する。
(7)比較から除外するフォルダー名。
(8)ローカルパスを除外する。
(9)ソースパスにのみ存在する場合、その項目を表示する。
(10)ターゲットパスにのみ存在する場合、その項目を表示する。
(11)比較して異なる項目を表示する。
(12)比較して同じ項目を表示する。
(13)比較を実行する。
(14)比較を中止する。
ソース管理エクスプローラーでの比較ではローカルに存在するコードとサーバー上のコードの差分比較を行うことが多いが、サーバーにチェックインされているソース同士の比較も可能だ。参照ボタンの右隣にある[▼]ドロップダウンをクリックすればサーバーパスとローカルパスを切り替えられる。
比較を行うと、以下のような結果が表示される。
テストが終了して、問題ないことが分かれば派生元のブランチにマージしよう。ソース管理エクスプローラーからマージしたいブランチを選択して、コンテキストメニューの[分岐とマージ]-[マージ]かツールバーの[マージ]ボタンをクリックする。すると、以下のようなダイアログが表示される。
ソース管理マージウィザード
(1)マージしたい分岐を選択する。
(2)マージ対象のサーバーフォルダーを選択する。
(3)マージする変更セットを選択する。通常は[特定のバージョンまでのすべての変更]を選択する。
(4)マージする対象の分岐を選択する。
(5)マージ対象のサーバーフォルダーを選択する。
(6)次のダイアログに進む。
(7)マージを中止する。
マージのソースとターゲットを選択後、[次へ]ボタンをクリックすると、マージする対象の変更セット(チェックイン単位をまとめて「変更セット」と呼ぶ)を検索する。通常は最新バージョンを選択すればよい。
ソース管理マージウィザード
(1)マージに使うチェックインバージョン。[最新バージョン]を選択すると、分岐してからマージ処理までに行われた全てのチェックインがマージ対象になる。
(2)前のダイアログに戻る。
(3)次の処理に移動する。
(4)マージ処理を完了する。
(5)マージを中止する。
マージが1回で成功した場合は問題ないが、同じファイルの同じ場所を異なるメンバーが別々に編集したということは往々にして発生する。このようなときはマージ時に衝突が検出されるので、人間の手で解決する必要がある(以下の画面)。
マージ時の競合の解決
(1)競合を自動解決する。
(2)全ての競合を取得する。
(3)最新の情報に更新する。
(4)履歴を表示する。
(5)比較を実行する。
(6)コメントを追加する。
(7)競合したファイルの一覧が表示される。
(8)マージツールを使用して、マージを実行する。
(9)ターゲット側(マージされる側)のファイルを維持する。
(10)ソース側(マージする側)のファイルを維持する。
(11)競合の詳細内容が表示される。
衝突した場合はその修正を行った人が行ったチェックインに関連付けられている作業項目の内容を確認すると、解決のヒントになる場合がある。
マージ時の衝突はしばしば発生するため、チェックインには可能な限り作業項目を関連付けておくことを推奨する。VS Onlineのチェックインポリシーを設定することにより、チェックイン時に作業項目の関連付けを必須にできるので、活用してほしい。
マージ作業が衝突した場合にマージをどう実行するかには次の三つの方法がある。
- マージツールで差分を比較して、部分単位で結合する
- ターゲット側を採用する
- ソース側を採用する
ターゲット側とソース側のどちらかのソースを採用する場合はそのまま選択すれば、それが反映されるが、マージツールを使えば、双方から反映させることが可能だ。マージツールで競合を比較している例を以下に示す。
マージ処理での比較
(1)現在の設定でマージを実行する。
(2)前の相違点に移動する。
(3)先頭の相違点に移動する。
(4)最後の相違点に移動する。
(5)次の相違点に移動する。
(6)ウィンドウの表示レイアウトを変更する。
(7)マージで反映する部分にチェックを入れる。
(8)マージ結果のプレビューが表示される。
競合が発生したファイルのマージを行う場合、ソースとターゲットどちらを採用するかは通常難しい問題なので、マージツールを使って、確認しながら行うとよいだろう。
最後にTFVCにしかない特徴的な機能である「シェルブ」について見てみよう。
Copyright© Digital Advantage Corp. All Rights Reserved.