Android Studio最速入門~効率的にコーディングするための使い方

第29回バージョン管理 ─Subversion連携の使い方[前編]

はじめに

Git連携のときと同じく,今回から機能の解説編です。思いのほか分量が増したので,こちらも前後編の2回に分けて説明します。

Subversion連携時のユーザインターフェイスの特徴

Android StudioでSubversion連携を設定したときに変化するユーザインターフェイスのうち特徴的な部分について説明します。

Changesツールウィンドウ

「Local」タブはどのバージョン管理システムと連携しても違いはありません。Subversion連携時は「Repository」タブ,「Incoming」タブ,「Subversion Working Copies Information」タブが追加されます。

図1 Subversion連携時の「Changesツールウィンドウ」の外観
図1
「Repository」タブ
タブ名の通りリポジトリのコミットログを表示します。図2からもわかるとおりツールバーが豊富でさまざまな操作ができます。具体的な内容については,この次の章で説明します。
図2 ⁠Changesツールウィンドウ / Repositoryタブ」
図2
「Incoming」タブ
「Repository」タブと同じく,リポジトリのコミットログを表示していますが,ここに表示される内容は「まだワーキングコピーに取り込んでないコミットログ」に限ります。こちらも具体的な内容について改めて説明します。
「Subversion Working Copies Information」タブ
ワーキングコピーの情報を表示します。ここで,今のワーキングコピーがどのリポジトリから取得したものか確認することができます。主にsvn switchでワーキングコピーを切り替えた場合の確認に使います。
図3 ⁠Changesツールウィンドウ / Subversion Working Copies Informationタブ」
図3
ワーキングコピーの情報だけでなく,マージ作業もここから行うことができますが,その話は次回紹介します。

ステータスバー

一見すると何も変わってないように見えますが,ステータスバーの右端にコミットログの通知(Incoming)を行うアイコンが追加されます。

図4 ステータスバーの通知アイコン
図4

SVN Repositoriesツールウィンドウ

普段は隠れていますが,メニューバーの「VCS → Browse VCS Reposotory → Browse Subversion Repository...」を実行すると登場します。

図5 ⁠SVN Repositoriesツールウィンドウ」
図5

このツールウィンドウは,サーバ上のリポジトリを直接操作するときに使います。具体的な使い方については,次回説明する予定です。

Version Controlツールウィンドウ

Gitの時のような,実行したsvnコマンドをログする「Consoleタブ」は表示されません。主にワーキングコピーを更新したりマージしたときの詳細がレポートされます。

図6 ⁠Version Controlツールウィンドウ」
図6

コミットログを確認する

コミットログの確認は「Changesツールウィンドウ / Repositoryタブ」で行います。メニューバーの「VCS → Update Project...」を実行するとワーキングコピーの更新を行ってしまいます。ワーキングコピーはそのままでリポジトリのコミットログだけ確認したい場合は「Changesツールウィンドウ / Repositoryタブ」「Refresh⁠」アイコンをクリックします。

「Repositoryタブ」はコミットログを表示する「Changelistsペイン」と,コミットごとの対象ファイルを表示する「Changed filesペイン」の2つで構成されており,それぞれに専用のツールバーを持ちます。Android Studioの横幅が狭いとツールバーが隠れてしまうため,図7図8にツールバーがすべて表示されている状態を載せておきます。

図7 ⁠Changelistsペイン」とそのツールバー
図7
図8 ⁠Changed filesペイン」とそのツールバー
図8

Changelistsペインについて

「Changelistsペイン」に表示されるコミットログはツリー構造で表示してあり,コミットログ,オーナー,日付の表示位置や表示幅を切り替える事はできません。コミットログが長文になると「more...」というリンクが付き,これをクリックすることで,そのコミットログの詳細がポップアップ表示されます。ツールバーの「Show Details⁠」を押したときも同様です。

図9 ⁠Changelistsペイン」の詳細表示
図9

ツールバーの左側にある6つのアイコンは,コミットログ上のコンテキストメニューからも実行することができます。そのうち特筆すべき内容は次の4つです。

RefreshとClear
Refreshでコミットログの更新を行い,Clearでコミットログの表示をクリアします。これらの操作は「Changelistsペイン」のコミットログ全体に及ぼします(それ以外は,特定のコミットログを選択しないと実行できません⁠⁠。
個人的にはClearのアイコンが大変紛らわしくて好ましくありません。⁠そもそもクリアする用途がそんなにあるのかな?」と思いますが,svn switchでワーキングコピーを切り替えたときなどに意外と使いました……。
Revert
指定したコミットログを打ち消す変更をワーキングコピーに対して行います。いわゆるリバースパッチです。おそらくAndroid Studio独自の機能なのでしょう。運が良いと古いコミットまで打ち消すことができますが,パッチベースなのでファイルの移動やリネームなどに弱いです。
「Localタブ」の"Revert"とは機能が異なるので気をつけて下さい。ちなみに筆者は,この機能の存在を知っていましたが必要になったことは一度もありません。
Edit Revision Comment
選択したコミットログを編集します。実行すると図10のような編集ダイアログが表示されます。
図10 ⁠Edit Revision ## Comment」ダイアログ
図10

「Changelistsペイン」のツールバーのアイコンの右隣にある「Filter by」「Group by」はそれぞれコミットログのフィルタリングとグループ化を行います。それぞれの選択候補ですが,「Filter by」「Structure」「User」,「Group by」「Date」「User」です。

そう滅多に使う機能ではありませんが,「Structureによるフィルタリングは特定のディレクトリ(やファイル)の変更を探るときに役に立ちます。

図11 ⁠Filter by」⁠Group by」によるコミットログの表示変更(クリックすると動きがわかります)

Merge Infoペイン

実は「Repositoryタブ」にはもうひとつ「Merge Infoペイン」という画面が隠れています。これはマージ作業をするまで無用なものなので,次回にまとめて紹介します。

図12 ⁠Merge Infoペイン」
図12

Changed filesペインについて

コミットログごとの対象ファイルが表示されます。それほど特徴的な機能は少ないのですが,唯一の機能として「Compare Subversion Properties⁠」でSubversionのプロパティの変更差分を確認することができます。

図13 ⁠Subversion properties difference」ダイアログ
図13

コミットログの新着通知について

Subversionというより中央管理型リポジトリの制約とも言えるのですが,自身のワーキングコピーが最新なのかどうかはリポジトリから最新版を取得してみなければわからないというジレンマがあります。

それを手助けする機能が「Changesツールウィンドウ / Incomingタブ」です。表示している内容はとなりの「Repositoryタブ」同様リポジトリのコミットログなのですが,「Incomingタブ」にはワーキングコピーに取り込んでないものだけが表示されます。

図14 ⁠Incomingタブ」
図14
※「Repositoryタブ」にはワーキングコピーの状態に関わりなく,リポジトリのログを表示している

「Incomingタブ」を確認することにより,"Update Project..."で更新されるであろうワーキングコピーの様子を事前に把握することができます。

さらに面白い機能があり,リポジトリ上の変更を定期チェックし,変更があるとそれをステータスバーに通知します。

図15 Subversionの更新通知(Incoming)
図15

通知監視のタイミングは「Preferences / Version Control / Background」「Refresh changes every」で行います。

図16 ⁠Preferences / Version Control / Background」設定画面
図16

たまたま更新対象になるファイルを編集している最中に更新を検知すると図17のようにエディタ上にアクションが通知されます。

図17 テキストエディタでのSubversionの更新通知
図17

ともするとsvn updateを忘れてガシガシとコーディングを進めてしまいコミット時に悲しい思いをしがちなので,この更新通知機能は密かに気に入っています。

ワーキングコピーの更新

いわゆるsvn updateです。普段使いならメニューバーの「VCS → Update Project...」から行います。⁠VCS → Subversion → Update Directory...」を実行しても同じ結果になります。

図18 ⁠Update Project」ダイアログ
図18

この「Update Project」ダイアログの「Update/Switch to specific revision」をONにして,隣のテキストフィールドにリビジョン番号を指定すれば,特定のリビジョンを svn updateすることができます。

ただ残念な事に「今のワーキングコピーがどのリビジョンのものか」を確認する手段はありませんので,この手の作業をするときは十分注意して下さい。⁠Changesツールウィンドウ / Subversion Working Copies Informationタブ」には,リポジトリのURLしか載っておらず,どのリビジョンなのかはわかりません。

究極的には「Terminalツールウィンドウ」を開き svn info を実行すれば,どのリビジョンのワーキングコピーなのかを知ることができます。

図19 Terminalから "svn info" を実行する
図19

なお「Update Project」ダイアログからワーキングコピーの切り替えsvn switchもできますが,ブランチの説明の時にあわせて紹介します。

コンフリクトが起きた場合

svn updateの時に限った話ではありませんがワーキングコピーやリポジトリの更新タイミングによってはファイルの衝突(コンフリクト)が起こります。コンフリクトを検知すると図20のような「Files Merged with Confilicts」ダイアログが表示されます。

図20 ⁠Files Merged with Confilicts」ダイアログ
図20

このダイアログの操作はGitのときと変わりないので,詳しくは第26回を参照してください。このダイアログを閉じずにコンフリクトを解消してしまえば良いのですが,何かしらの理由でいったんダイアログを閉じた場合,コンフリクト未解決の状態になります。

コンフリクトが未解決であることは「Changesツールウィンドウ / Localタブ」「Projectツールウィンドウ」から確認することができます。

図21 コンフリクトが未解決(Changesツールウィンドウ)
図21
図22 コンフリクトが未解決(Projectツールウィンドウ)
図22

再度「Files Merged with Confilicts」ダイアログを表示してコンフリクトの解決を再開したい場合は,メニューバーの「VCS → Subversion → Resolve Text Conflict...」を実行します。感覚的に先ほど図示した「Changesツールウィンドウ / Localタブ」「Projectツールウィンドウ」のコンテキストメニューからもコンフリクトの解決ができそうに思えるのですが,そのようなメニューは存在しません。

また何らかの理由でAndroid Studioの機能を使わず別の方法でコンフリクトを解決したい場合はメニューバー「VCS → Subversion → Mark Resolved...」を実行します。このコマンドを実行すると図23のようなダイアログが表示されます。

図23 ⁠Mark Resolved」ダイアログ
図23

ファイルの移動やリネーム

Subversion連携時はGit連携時と異なり「Version Controlツールウィンドウ」に実行したsvnコマンドは出力されません。よってAndroid Studioの内部でどのようなsvn操作が行われているかは想像に任せるほかにありません。

実際に「Projectツールウィンドウ」上でファイルの移動やリネーム(どちらも "Move...","Rename..."リファクタリングに相当します)を行ったときの結果を図28に示します。

図28 ファイルの移動やリネームを行ったときの変更履歴
図28

どちらもSubversionにも「移動した(Moved⁠⁠リネームした(renamed⁠⁠」と認識されています。このようにファイルの移動も追跡できているからツリーコンフリクトが起きるとも言えるのでしょう。

変更をコミットする

前回紹介したとおり"Commit Changes"を実行するとコミット用の「Commit Changes」ダイアログが表示されます。

図29 ⁠Commit Changes」ダイアログ
図29

Subversion固有の機能に特筆すべき点は特にありません。画面右端に2つのチェックボックスがありますが,それほど気にする内容ではありません。

Auto-update after commit
コミット完了後にsvn updateを実行する。
Keep files locked
ロックしたファイルを,そのままロック中にする。

ファイルのロックについて

先ほどの「Commit Changes」ダイアログにあった「Keep files locked(ロックしたファイルを,そのままロック中にする⁠⁠」オプションですが,ロックそのものの取得は対象ファイルを選び,メニューバーの「VCS → Subversion → Lock...」で行います。

メニューバーにしろ「Projectツールウィンドウ」のコンテキストメニューにしろ,階層が深いところにあって選択しづらいので,ファイルを選択した後は「Find Action」から"Lock..."を実行するやり方をオススメします。

図30 ⁠Lock File」ダイアログ
図30
※残念ながら検証に使ったGoogle Codeのリポジトリはロックに対応していませんでした(実行すると"Error:svn: E160000: Not Implemented"となります⁠⁠。

ロックの解除は,"Lock..."コマンドの下にある"Unlock"で行います。

次回の予定

Subversionでは鬼門扱いされているブランチ&マージについて説明します。

おすすめ記事

記事・ニュース一覧