現在使っているSubversionのリポジトリサーバがCentOS 5.2でSubversionは1.4.2-2(r22196)がインストールされている。これまではサーバ側のバージョンとクライアント側のバージョンをなるべく1.4に統一してやっていた。最近はGitを使うことが増えてきて、既存のsvnリポジトリと連携したいケースも出てきたが、git-svnを使うには1.6が必要。いま(2011年11月)はCentOS 5.2上でyum updateを実行しようとするとSubversion 1.6.11-7がインストールされるようだが、1.4.xと1.6.xでは互換性がどうなっているのかよくわからないので、いろいろ試してからアップグレードすることにした。
- 現在の環境
- Subversion 1.4でリポジトリ作成
- 1.4のリポジトリに1.6.x系のクライアントでアクセス
- yumでSubversion 1.6をインストール
- 1.4で作成されたリポジトリに1.4と1.6でアクセス
- 1.4でチェックアウトした作業コピーを1.6で操作
- 1.6で作成されたリポジトリに1.4からアクセス
- まとめ
現在の環境
- OS: CentOS release 5.2 (Final)
- Subversion: バージョン 1.4.2 (r22196)
- mod_dav_svn: 1.4.2
※いきなり本番環境のSubversionをアップデートするわけにもいかないのでVMを構築しようと思ったら、いま(2011年11月)CentOS 5.2を入手してSubversionとmod_dav_svnをyumインストールしようとすると1.6系しかインストールできない。昔のVMを引っ張り出してなんとかSubversionとmod_dav_svnが両方1.4.2の環境を用意した。
Subversion 1.4でリポジトリ作成
リポジトリは以下のように作成。
# cd /var/www/svn # svnadmin create project1 --fs-type fsfs # chown -R apache.apache project1
ブラウザから http://[ip]/svn/project1 にアクセスして「Revision 0」と表示されればリポジトリの作成は成功。この状態で/var/www/svn/project1/db/formatを確認すると「2」と書いてあり、formatタイプが2であることが分かる。
ここに適当にファイルをコミットしておく。
$ mkdir project1 $ ethna add-project sample $ cd .. $ svn import -m "New Import" project1 http://[ip]/svn/project1/trunk/project1 $ rm -fr project1 $ svn checkout http://[ip]/svn/project1/trunk/project1 ./project1
1.4のリポジトリに1.6.x系のクライアントでアクセス
CentOS 5.6にインストールされているsvn 1.6.11(r934486)でプロジェクトをチェックアウトし、ファイルを変更する。その後svn 1.4.2からも問題なくリポジトリの操作が行えたため、この操作によって1.4のリポジトリのフォーマットが変わっていないことが分かる。
(db/formatも2のまま)
(db/formatも2のまま)
同様にTortoiseSVN 1.6.11でプロジェクトをチェックアウトし、ファイルを変更したが結果はsvnコマンドと同じだった。
yumでSubversion 1.6をインストール
CentOS 5.2でyumを使ってSubversion 1.6をインストールする。
# yum update subversion Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.khlug.org * updates: mirror.khlug.org * extras: ftp.daum.net Setting up Update Process Resolving Dependencies --> Running transaction check ---> Package subversion.i386 0:1.6.11-7.el5_6.4 set to be updated --> Processing Dependency: subversion = 1.4.2-4.el5_3.1 for package: mod_dav_svn --> Running transaction check ---> Package mod_dav_svn.i386 0:1.6.11-7.el5_6.4 set to be updated --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================================================= Package Arch Version Repository Size ======================================================================================================================================================= Updating: mod_dav_svn i386 1.6.11-7.el5_6.4 base 78 k subversion i386 1.6.11-7.el5_6.4 base 3.1 M Transaction Summary ======================================================================================================================================================= Install 0 Package(s) Update 2 Package(s) Remove 0 Package(s) Total download size: 3.2 M Is this ok [y/N]: y Downloading Packages: (1/2): mod_dav_svn-1.6.11-7.el5_6.4.i386.rpm | 78 kB 00:00 (2/2): subversion-1.6.11-7.el5_6.4.i386.rpm (13%) 11% [===== ] 0.0 B/s | 360 kB --:-- ETA (2/2): subversion-1.6.11-7.el5_6.4.i386.rpm (27%) 25% [============ ] 738 kB/s | 816 kB 00:03 ETA (2/2): subversion-1.6.11-7.el5_6.4.i386.rpm (35%) 33% [================ ] 744 kB/s | 1.1 MB 00:02 ETA (2/2): subversion-1.6.11-7.el5_6.4.i386.rpm (60%) 60% [============================- ] 868 kB/s | 1.9 MB 00:01 ETA (2/2): subversion-1.6.11-7.el5_6.4.i386.rpm (71%) 70% [=================================- ] 883 kB/s | 2.2 MB 00:01 ETA (2/2): subversion-1.6.11-7.el5_6.4.i386.rpm (76%) 75% [==================================== ] 862 kB/s | 2.4 MB 00:00 ETA (2/2): subversion-1.6.11-7.el5_6.4.i386.rpm (81%) 81% [======================================- ] 843 kB/s | 2.5 MB 00:00 ETA (2/2): subversion-1.6.11-7.el5_6.4.i386.rpm (86%) 86% [========================================= ] 822 kB/s | 2.7 MB 00:00 ETA (2/2): subversion-1.6.11-7.el5_6.4.i386.rpm (91%) 91% [===========================================- ] 807 kB/s | 2.9 MB 00:00 ETA (2/2): subversion-1.6.11-7.el5_6.4.i386.rpm (95%) 95% [=============================================- ] 784 kB/s | 3.0 MB 00:00 ETA (2/2): subversion-1.6.11-7.el5_6.4.i386.rpm (99%) 99% [===============================================-] 762 kB/s | 3.1 MB 00:00 ETA (2/2): subversion-1.6.11-7.el5_6.4.i386.rpm | 3.1 MB 00:03 ------------------------------------------------------------------------------------------------------------------------------------------------------- Total 764 kB/s | 3.2 MB 00:04 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Updating : subversion [1/4] Updating : mod_dav_svn [2/4] Cleanup : subversion [3/4] Cleanup : mod_dav_svn [4/4] Updated: mod_dav_svn.i386 0:1.6.11-7.el5_6.4 subversion.i386 0:1.6.11-7.el5_6.4 Complete!
mod_dav_svnもアップデートされたのでhttpdを再起動する。
# /etc/init.d/httpd restart
アップデートしただけでは/var/www/svn/project1以下のファイルには変化はないようだ。
1.4で作成されたリポジトリに1.4と1.6でアクセス
ここへんからが一番知りたいところ。現状/var/www/svn以下には1.4で作成されたformat=2のリポジトリがある。ローカルにインストールされたsvnは1.6.11(r934486)になったので、チェックアウトしてみる。
$ cd /tmp $ svn checkout http://[ip]/svn/project1/trunk/project1 ./project1 $ cd project1 $ vim sample/www/index.php $ svn commit -m "index.phpの変更"
さらに別のLinuxに入っているsvn 1.4.2でチェックアウトやコミットを試してみるが...なんともない。db/formatも2のまま。むむ。
1.4でチェックアウトした作業コピーを1.6で操作
上記の例ではSubversionを1.6に上げたが、1.4で作られたformat=2のリポジトリをチェックアウトして作業する想定だった。今度は1.4の時点で取得した作業コピーをsvn 1.6.11で操作するとどうなるのか試す。サーバのSubversionも1.6.11に上がっている。作業コピーだけが1.4という状況。
$ cd /path/to/project1 $ vim sample/www/index.php $ svn commit -m "index.phpの変更"
1.6で操作後別のマシンから1.4で操作してみたが問題なし...db/formatも2のまま。フォーマットは変わっていない。むむむ。うまく操作できなくなると予想していたけど予想はハズレ。
1.6で作成されたリポジトリに1.4からアクセス
以下のコマンドで新たにリポジトリを作成する。1.6にバージョンが上がっているのでformat=4のリポジトリが作成される。
# cd /var/www/svn # svnadmin create project2 --fs-type fsfs # chown -R apache.apache project2
このリポジトリに1.4と1.6の両方でアクセスしたが、1.4からでも問題なく操作できた。
まとめ
ここから分かったことを(多くないけど)とりあえずまとめてみる。
- yum updateによるSubversion 1.4.2 -> 1.6.11のアップデートではリポジトリのフォーマットは変更されない
- 1.4.2で作成されたリポジトリにsvn 1.4とsvn 1.6の両方でアクセスしても問題ない
- 1.6.11で作成されたリポジトリにsvn 1.4とsvn 1.6の両方でアクセスしても問題ない
ただし、今回試したのはcheckoutして編集してcommitするという非常に単純な作業だったし、ファイル数も多くない。
Subversion 1.5で追加されたshardingという機能はリビジョンが1000を超えると影響がありそうだが、それもテストできていない。
Subversion 1.5で追加されたshardingという機能はリビジョンが1000を超えると影響がありそうだが、それもテストできていない。
だが互換性は1.1系から1.4系に上げるときより格段に高いようなので、本番環境ではsvnadmin dumpでリポジトリのダンプを取得した状態でアップグレードを実施してみようと思う。
