IDEA8のSVN merge-trackingサポートが良くできてる

Subversion1.5でmerge-trackingが追加されたのは有名な話。IntelliJもIDEA8から*1SVN1.5をサポートしてると知ってはいたが,merge-trackingもIntelliJのサポートもよく分かってなかった。
最近,merge-trackingを実際に使ってみる機会があったので,覚えているうちにメモっておく。


merge-tracking自体はTortoiseSVNでやった。これ簡単に言うと「あるブランチが,どのチェンジセットをマージしたかを覚えている」機能のこと。具体的にはsvn:mergeinfoプロパティに,マージしたチェンジセット番号を記録しているようだ。
#余談だけど,マージではカンマ(,)やハイフン(-)で複数のチェンジセットを指定できる。


で,IntelliJのほうはChangesツールウィンドウにそれっぽいアイコンがあって,それを押すとMerge Infoを表示するようになる。


最初このMerge Infoの見方がわからなかったんだけど,見方がわかるとすごく便利ね,これ。
今のプロジェクト(作業コピー)を基点(From)に,指定したブランチ(To)にどのチェンジセットがマージ済みかどうかを表示したり,指定したチェンジセットをマージしたりできる。
たとえば,

c:\work
    + branch-1\
    + trunk\

のように2つの作業コピーがあって,branch-1をIntelliJで開いていたとすると勝手にtrunkをToに設定*2して,branch-1からtrunkに対するマージの状況を表示する。
例えば,先の図で言うと「チェンジセット#125, #126, #134は,branch-1からtrunkにマージ済み」と見る。


これがね,すごい便利なワケだ。チェンジセットごとにマージ済みかどうかがわかるんで,ついうっかりマージし忘れたとか一目瞭然。:-)


さらにMerge Info側のツールバーで,マージ実行したり,キャンセルしたりもできる。


各アイコンの機能はこんなん。

  • Highlight Integrated
    • チェンジセット一覧にマージ済みアイコンを表示する。
  • Integrated To Branch
    • 選択したチェンジセットをTo側にマージする。その後,コミットダイアログが出る。
  • Undo Integrated To Branch
    • 「選択したマージ済みチェンジセットをキャンセルする」んだと思う。怖くて押したことない。:-)
  • Mark As Merged
    • 選択したチェンジセットをマージしたことにする(svn:mergeinfoのみ設定する)。何のために使うのか,いまひとつ分かってない。
  • Mark As Not Merged
    • "Mark As Merged"の逆。
  • Filter系は説明割愛

Subversionのmerge-trackingは確かに便利なんだけど,こうゆう風に可視化してくれるクライアントが無いと,ちょーっと及び腰になるわな。
つうわけで,TortoiseSVNもガンバって欲しい。;-)

*1:IDEA7にもバックポートされてるかも知んない(ウロ覚え)

*2:当然,任意の作業コピーをTo側に指定することもできるよ