Subversion 1.7 で switch や merge ができないときの対処方法
Subversion 1.7.10 をソースからインストールしたら、svn switch
や svn merge
が以下のエラーを吐いて失敗するようになってしまいました。
# svn merge https://uso.com/svn/mojamoja/2.13.1
...
svn: E200007: Error running context
svn: E200007: Trying to use an unsupported feature
直し方をメモしておきます。
原因
Subversion は内部の HTTP/HTTPS クライアントとして serf または neon を使います。Configure オプションを特に指定しない場合は serf が使われるようですが、これに不具合があったようです。
何も configure オプションを指定せずにインストールした場合、svn --version
を実行すると下記の通り出力されます。
# svn --version
svn, version 1.7.10 (r1485443)
compiled Jul 24 2013, 16:16:57
...
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
- handles 'http' scheme
- handles 'https' scheme
「serf が http と https をハンドルするぜ」と書いていますが、実際には E200007 エラーを吐いて止まります。
対策
もう一つの選択肢である neon を使うようにしたら、問題なく動作するようになりました。
再コンパイル手順は以下のとおりです。
# cd subversion-1.7.10/
// 依存しているパッケージをダウンロードしてくれる便利なスクリプト。
# ./get-deps.sh
// neon をコンパイルしてインストールする。
// (CentOS なら `yum install neon neon-devel` でも OK)
// `--with-ssl` を忘れずに!
# cd neon/
# ./configure --with-ssl
# make && make install
// Subversion をインストールする。
# cd ../
# make distclean
# ./configure \
--without-berkeley-db \
--with-neon \
--with-ssl
# make && make install
正しくインストールできると、以下のように ra_neon
という表示が出ます。
# svn --version
...
* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
- handles 'http' scheme
- handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
- handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
- handles 'file' scheme
handles 'https' scheme
と出力されない時は、--with-ssl
を付け忘れています。それでは https 通信ができないので、再コンパイルしてください。
余談
今回とは逆で、「neon だとエラーになるが serf なら大丈夫だった」という事例もありました。
Debian squeeze の subversion で http リポジトリにアクセスできなくなった / マスタカの ChangeLog メモ
バージョンアップのたびに不具合が入れ替わるんでしょうか。
奇妙です。