Java Day Tokyo 2013の裏方で takezoe さんをIntelliJ派に洗脳してた

というのは冗談。生粋のeclipse派の id:takezoe さんもScalaIntelliJを使うらしく,控え室でいくつかIntelliJの使い方を聞かれた。長いこと使ってたから気付いたとか,当たり前に使ってた操作があまり知られてないんだなって,はじめて気付いた。冷静に考えればIDEA9くらいから使い始めたとしても,すでに機能満載なんだから,使いこなせてるって思う方が間違いなんだろな(まわりに使ってる人いないから,そんな事にも気がつかなかったw


IntelliJでバージョン管理をするオススメなやり方

IntelliJSubversionやgitなどと連係してバージョン管理する場合は(左側の)Projectツールウィンドウより,(下側の)Changesツールウィンドウを使うことをオススメします。ちなみに,たまに出てくる(下側の)Version Controlツールウィンドウはgitやhgコマンドのログが出るだけなので,基本的に使う事はありません。
#裏でIntelliJがどんなコマンド発行したかが分かるから、便利と言えば便利。


バージョン管理の操作(Addしたりremoveしたり)はProjectツールウィンドウでもできるんですが,正しく言うと元々はChangesツールウィンドウでしか,その手の操作ができず,IntelliJのバージョンアップに伴い(他のIDEみたく)Projectツールウィンドウでもできるようになった。ってのが正解です。
そんなわけで,バージョン管理に関するモロモロの操作は,ProjectツールウィンドウよりChangesツールウィンドウのほうが便利に使えるようにできてます(そんな事,知りませんよね。(´・ω・`)


で,このChanges,何が便利かと言うと,変更のカタマリ(コミットする単位*1)を複数管理することができます。普段は,"Default" Changelistとバージョン管理対象外(Unversioned Files)しかありません。
#左のツールバーから「Group by Directory」を選ぶと階層表示になるんで,押しておきましょう。


バージョン管理対象("Default" Changelist)に追加するのは,このUnversioned FilesからChangelistにドラッグ&ドロップする方法を好んで使ってます(他にもやり方いっぱいあるけど。


Changelistを増やす方法もいろいろです。既存のChangelistからある一部を新しいChangelistにする方法もあれば,ツールバーからまっさらなChangelistを作ることもできます。
#Changelist同士のファイルのやり取りはドラッグ&ドロップでできます。


Changelistは必ずどれかひとつがActive状態になります(Active,非Activeの切り替えはツールバーコンテキストメニューでできます)。ActiveなChangelistが、VCSメニューなどでコミット指示したときの対象となります。


こんな風にローカルで編集した内容を一律でコミットするのではなく,Changelistに分けてコミットすることができます。ここまで聞いてピンとくる人にとってはとても便利な機能です。


なお,ActiveじゃないChangelistのファイルを編集してしまった場合は「Changelistを切り替えるか,そのファイルを今のChangelistに移すか?」と聞いてくるので安心してください。ダークテーマ(Darcula)に対応してないんで見づらいのが玉に瑕。:-P


さすがに同じファイルを複数のChangelistで共有することはできません。


ChangelistはTask Managerと連係することでBTS/ITSのチケットを紐付けたり*2,Shelve Changesといってgit stash的な事をする事ができます。特にShelveはgitが出るまで地味に便利な機能でした。
IDEA7のShelve Changesが鼻血吹くほど便利な件について - marsのメモ


ちなみに、Changesツールウィンドウはどのバージョン管理ツールを設定しても似たような表示になります。特に「Local」タブは共通。コミットログについては連携するツールによって「Log」とか「Repository」という表示になります。


なおGitの場合、ステータスバーに現在のブランチ名が表示され、そこをクリックするとブランチの切替とかあれこれ便利なことができます。Mercurialだとブランチ名は表示されるけどクリックできないし、Subversionはブランチ名すら表示されません。なんか、Gitだけえこひいき。(´・ω・`)

おまけ:ローカルヒストリについて

今やほとんどのIDEについているローカルヒストリ(VCS->Local History->Show History)なんですが、エディタにフォーカスしてる時に実行すると、下記のようないかにもな差分表示がされます。


だけど、Projectツールウィンドウでなんかテキトウなディレクトリ選んで、同じ事すると、こんな具合にそのディレクトリの変更履歴が出てきて、ディレクトリごと過去に戻したりできます。


そう、しょっちゅう使う機能じゃありませんが、こんな事もできるって知っているとイザと言うとき命拾いしますw


ps.
バージョン管理方法なんて、IDEによって全然操作感が違うから、なんとなく出来てるけど、どこまで出来るか知らないってのは良くあるんだろうなと思ったできごとでした。
それ(IDE事の差異)が面倒だから、TortoiseやSourceTreeみたいな専用ツールやコマンドライン使うんだろな。そんでも、ある程度IDEと連携したほうが便利な場合もあるのよ(IntelliJの場合、Changelistがそう。

*1:IntelliJではChangelistと呼びます

*2:と言ってもTask Managerはまともに使ったこと無いんで伝聞ですが...