Subversion 1.4.0 リリース

俺が知る中で最高にいかしたSCM、Subversionの1.4.0がリリースされている。今回は1.3系からのメジャーバージョンアップ、ということで新機能も追加されているようなので、幾分まじめにRelease Notesを読んでみた。英語に明るくないので、大嘘付いてるかもしれない。

SubmergedというWebCastを提供しているので、英語に堪能な人はそちらを見るとわかりやすいかも?

互換性

1.4は、1.3系のリポジトリとの下位互換を保っているので、ダンプ、リポジトリ作り直し、インポート、といった一連の移行作業を行わなくてもとりあえず動く。が、1.4で拡張された機能をちゃんと使おうと思うと、やっぱり移行作業が必要になる。

バイナリ差分アルゴリズムの改善

バイナリ差分アルゴリズムが改善された。最大50%のサイズ減になるそうだ。ディスク使用量も減るし、当然ながら通信量も減る。ただし、これを利用するには、リポジトリの作り直しが要求される。

Berkeley DB 4.4への対応

ついでに、auto-recoveryなる機能にも対応したという。よくわからないが、svnのプロセスが途中でクラッシュして、データがやばい状態になっても、勝手に復元してくれるらしい。"In theory (and in our testing), this new feature makes BerkeleyDB-based repositories just as wedge-proof as FSFS repositories."の、wedge-proofの意味がわからない。

作業コピーの性能改善

.svn/entriesは元々XMLファイルだったのだが、このフォーマットをプロパティみたいなのに変更して、その結果作業コピーにおけるいろいろな操作の処理速度が向上したらしい。この変更があるため、1.4系の作業コピーを1.3系のクライアントで利用することはできなくなる。さらに、1.3系作業コピーで1.4系クライアントを使うと、何の断りもなく勝手に中身を1.4仕様に書き換えてしまうので、注意が必要。

コマンドオプションの追加

svn blame, svn diff, svn mergeにいくつかのオプションが追加。svn blame --forceでバイナリファイルでも無理矢理blameできるようになった(嬉しいのか?)、svn diffとsvn mergeにdiff3プログラムを食わせられる、など。個人的に嬉しいのは、svn diff -x -bとか-x -wで空白文字を無視できるようになった点と、svn mergeやsvn diffに-c(--change)オプションを渡せるようになった点。r33での変更内容を知りたいとき、svn diff -r32:33とかしてたのを、svn diff -c33という風に簡単に書ける。

svnsyncコマンドの追加

複数のリポジトリ間で同期をとるためのユーティリティであるらしい。名前から想像がつくと思うが、rsyncと同じような使い方ができる。つまりバックアップするのに都合がよい。データのコミットは互換性の高いネットワークコマンドで行うので、コピー元のリポジトリはどのバージョンで作っても良い。ただし、コピー先のリポジトリは、レプリケーションする相手と、どこまでレプリケーションしたのかを記録する都合上、1.4以降のバージョンで作らなければならない。と思う(汗
ごめん、これ逆。コピー先は古いバージョンのSVNサーバが上がっていてもいい、コピー元は1.4以降のサーバじゃないとダメ。
こいつでもう一個ぐらい記事書くかも。

svnserveWindows Serviceとして動作可能に

俺はapacheをフロントエンドに立てるけど、まぁこういうこともできますよ、と。


とにかく、パフォーマンス向上に力を入れたリリースであるようだ。今仕事で使っているSVNリポジトリが最近重たくなってきたし、入れ替えてもいいかもなぁ。