はじめに
Git連携のときと同じく,今回から機能の解説編です。思いのほか分量が増したので,こちらも前後編の2回に分けて説明します。
Subversion連携時のユーザインターフェイスの特徴
Android StudioでSubversion連携を設定したときに変化するユーザインターフェイスのうち特徴的な部分について説明します。
Changesツールウィンドウ
「Local」タブはどのバージョン管理システムと連携しても違いはありません。Subversion連携時は「Repository」タブ,「Incoming」タブ,「Subversion Working Copies Information」タブが追加されます。
- 「Repository」タブ
- タブ名の通りリポジトリのコミットログを表示します。図2からもわかるとおりツールバーが豊富でさまざまな操作ができます。具体的な内容については,この次の章で説明します。
-
- 「Incoming」タブ
- 「Repository」タブと同じく,リポジトリのコミットログを表示していますが,ここに表示される内容は「まだワーキングコピーに取り込んでないコミットログ」に限ります。こちらも具体的な内容について改めて説明します。
- 「Subversion Working Copies Information」タブ
- ワーキングコピーの情報を表示します。ここで,今のワーキングコピーがどのリポジトリから取得したものか確認することができます。主に
svn switch
でワーキングコピーを切り替えた場合の確認に使います。
-
- ワーキングコピーの情報だけでなく,マージ作業もここから行うことができますが,その話は次回紹介します。
ステータスバー
一見すると何も変わってないように見えますが,ステータスバーの右端にコミットログの通知(Incoming)を行うアイコンが追加されます。
SVN Repositoriesツールウィンドウ
普段は隠れていますが,メニューバーの「VCS → Browse VCS Reposotory → Browse Subversion Repository...」を実行すると登場します。
このツールウィンドウは,サーバ上のリポジトリを直接操作するときに使います。具体的な使い方については,次回説明する予定です。
Version Controlツールウィンドウ
Gitの時のような,実行したsvn
コマンドをログする「Consoleタブ」は表示されません。主にワーキングコピーを更新したりマージしたときの詳細がレポートされます。
コミットログを確認する
コミットログの確認は「Changesツールウィンドウ / Repositoryタブ」で行います。メニューバーの「VCS → Update Project...」を実行するとワーキングコピーの更新を行ってしまいます。ワーキングコピーはそのままでリポジトリのコミットログだけ確認したい場合は「Changesツールウィンドウ / Repositoryタブ」の「Refresh()」アイコンをクリックします。
「Repositoryタブ」はコミットログを表示する「Changelistsペイン」と,コミットごとの対象ファイルを表示する「Changed filesペイン」の2つで構成されており,それぞれに専用のツールバーを持ちます。Android Studioの横幅が狭いとツールバーが隠れてしまうため,図7と図8にツールバーがすべて表示されている状態を載せておきます。
Changelistsペインについて
「Changelistsペイン」に表示されるコミットログはツリー構造で表示してあり,コミットログ,オーナー,日付の表示位置や表示幅を切り替える事はできません。コミットログが長文になると「more...」というリンクが付き,これをクリックすることで,そのコミットログの詳細がポップアップ表示されます。ツールバーの「Show Details()」を押したときも同様です。
ツールバーの左側にある6つのアイコンは,コミットログ上のコンテキストメニューからも実行することができます。そのうち特筆すべき内容は次の4つです。
- Refresh()とClear()
- Refreshでコミットログの更新を行い,Clearでコミットログの表示をクリアします。これらの操作は「Changelistsペイン」のコミットログ全体に及ぼします(それ以外は,特定のコミットログを選択しないと実行できません)。
- 個人的にはClearのアイコンが大変紛らわしくて好ましくありません。「そもそもクリアする用途がそんなにあるのかな?」と思いますが,
svn switch
でワーキングコピーを切り替えたときなどに意外と使いました……。
- Revert()
- 指定したコミットログを打ち消す変更をワーキングコピーに対して行います。いわゆるリバースパッチです。おそらくAndroid Studio独自の機能なのでしょう。運が良いと古いコミットまで打ち消すことができますが,パッチベースなのでファイルの移動やリネームなどに弱いです。
- 「Localタブ」の"Revert"とは機能が異なるので気をつけて下さい。ちなみに筆者は,この機能の存在を知っていましたが必要になったことは一度もありません。
- Edit Revision Comment()
- 選択したコミットログを編集します。実行すると図10のような編集ダイアログが表示されます。
-
「Changelistsペイン」のツールバーのアイコンの右隣にある「Filter by」と「Group by」はそれぞれコミットログのフィルタリングとグループ化を行います。それぞれの選択候補ですが,「Filter by」は「Structure」と「User」,「Group by」は「Date」と「User」です。
そう滅多に使う機能ではありませんが,「Structureによるフィルタリングは特定のディレクトリ(やファイル)の変更を探るときに役に立ちます。
Merge Infoペイン
実は「Repositoryタブ」にはもうひとつ「Merge Infoペイン」という画面が隠れています。これはマージ作業をするまで無用なものなので,次回にまとめて紹介します。
Changed filesペインについて
コミットログごとの対象ファイルが表示されます。それほど特徴的な機能は少ないのですが,唯一の機能として「Compare Subversion Properties()」でSubversionのプロパティの変更差分を確認することができます。
コミットログの新着通知について
Subversionというより中央管理型リポジトリの制約とも言えるのですが,自身のワーキングコピーが最新なのかどうかはリポジトリから最新版を取得してみなければわからないというジレンマがあります。
それを手助けする機能が「Changesツールウィンドウ / Incomingタブ」です。表示している内容はとなりの「Repositoryタブ」同様リポジトリのコミットログなのですが,「Incomingタブ」にはワーキングコピーに取り込んでないものだけが表示されます。
「Incomingタブ」を確認することにより,"Update Project..."で更新されるであろうワーキングコピーの様子を事前に把握することができます。
さらに面白い機能があり,リポジトリ上の変更を定期チェックし,変更があるとそれをステータスバーに通知します。
通知監視のタイミングは「Preferences / Version Control / Background」の「Refresh changes every」で行います。
たまたま更新対象になるファイルを編集している最中に更新を検知すると図17のようにエディタ上にアクションが通知されます。
ともするとsvn update
を忘れてガシガシとコーディングを進めてしまいコミット時に悲しい思いをしがちなので,この更新通知機能は密かに気に入っています。
ワーキングコピーの更新
いわゆるsvn update
です。普段使いならメニューバーの「VCS → Update Project...」から行います。「VCS → Subversion → Update Directory...」を実行しても同じ結果になります。
この「Update Project」ダイアログの「Update/Switch to specific revision」をONにして,隣のテキストフィールドにリビジョン番号を指定すれば,特定のリビジョンを svn update
することができます。
ただ残念な事に「今のワーキングコピーがどのリビジョンのものか」を確認する手段はありませんので,この手の作業をするときは十分注意して下さい。「Changesツールウィンドウ / Subversion Working Copies Informationタブ」には,リポジトリのURLしか載っておらず,どのリビジョンなのかはわかりません。
究極的には「Terminalツールウィンドウ」を開き svn info
を実行すれば,どのリビジョンのワーキングコピーなのかを知ることができます。
なお「Update Project」ダイアログからワーキングコピーの切り替え(svn switch
)もできますが,ブランチの説明の時にあわせて紹介します。
コンフリクトが起きた場合
svn update
の時に限った話ではありませんがワーキングコピーやリポジトリの更新タイミングによってはファイルの衝突(コンフリクト)が起こります。コンフリクトを検知すると図20のような「Files Merged with Confilicts」ダイアログが表示されます。
このダイアログの操作はGitのときと変わりないので,詳しくは第26回を参照してください。このダイアログを閉じずにコンフリクトを解消してしまえば良いのですが,何かしらの理由でいったんダイアログを閉じた場合,コンフリクト未解決の状態になります。
コンフリクトが未解決であることは「Changesツールウィンドウ / Localタブ」や「Projectツールウィンドウ」から確認することができます。
再度「Files Merged with Confilicts」ダイアログを表示してコンフリクトの解決を再開したい場合は,メニューバーの「VCS → Subversion → Resolve Text Conflict...」を実行します。感覚的に先ほど図示した「Changesツールウィンドウ / Localタブ」や「Projectツールウィンドウ」のコンテキストメニューからもコンフリクトの解決ができそうに思えるのですが,そのようなメニューは存在しません。
また何らかの理由でAndroid Studioの機能を使わず別の方法でコンフリクトを解決したい場合はメニューバー「VCS → Subversion → Mark Resolved...」を実行します。このコマンドを実行すると図23のようなダイアログが表示されます。
ファイルの移動やリネーム
Subversion連携時はGit連携時と異なり「Version Controlツールウィンドウ」に実行したsvn
コマンドは出力されません。よってAndroid Studioの内部でどのようなsvn
操作が行われているかは想像に任せるほかにありません。
実際に「Projectツールウィンドウ」上でファイルの移動やリネーム(どちらも "Move...","Rename..."リファクタリングに相当します)を行ったときの結果を図28に示します。
どちらもSubversionにも「移動した(Moved)」「リネームした(renamed)」と認識されています。このようにファイルの移動も追跡できているからツリーコンフリクトが起きるとも言えるのでしょう。
変更をコミットする
前回紹介したとおり"Commit Changes"を実行するとコミット用の「Commit Changes」ダイアログが表示されます。
Subversion固有の機能に特筆すべき点は特にありません。画面右端に2つのチェックボックスがありますが,それほど気にする内容ではありません。
- Auto-update after commit
- コミット完了後に
svn update
を実行する。
- Keep files locked
- ロックしたファイルを,そのままロック中にする。
ファイルのロックについて
先ほどの「Commit Changes」ダイアログにあった「Keep files locked(ロックしたファイルを,そのままロック中にする)」オプションですが,ロックそのものの取得は対象ファイルを選び,メニューバーの「VCS → Subversion → Lock...」で行います。
メニューバーにしろ「Projectツールウィンドウ」のコンテキストメニューにしろ,階層が深いところにあって選択しづらいので,ファイルを選択した後は「Find Action」から"Lock..."を実行するやり方をオススメします。
ロックの解除は,"Lock..."コマンドの下にある"Unlock"で行います。
次回の予定
Subversionでは鬼門扱いされているブランチ&マージについて説明します。