Subversion/トラブル

Top / Subversion / トラブル

Berkeley DBが壊れた時の対処

svnadmin recover /path/to/svn/repos
  • 他の人が作ったログファイルなどがあるとrecoverに失敗する(半端に成功する)
    • chownしてもらう(パーミッションを変えてもらうだけでいいのかも
  • db内のファイルがパーミッション644に戻っているので666にする(そういう管理の時は

DB_VERSION_MISMATCH

aptでいろいろ更新後

DB_VERSION_MISMATCH: Database environment version mismatch
svn: bdb: Program version 4.3 doesn't match environment version

http://subversion.tigris.org/faq.html#bdb43-upgrade を参考にしつつ、
・・・なんか違うことしてたり。

  1. svnadmin recover /path/to/svn/repos → エラー
  2. 古い svnadmin の バイナリを拾ってくる
  3. oldsvnadmin recover /path/to/svn/repos → エラー
  4. svnadmin recover /path/to/svn/repos → エラー
  5. touch 〜/db/log.0000000134
  6. svnadmin recover /path/to/svn/repos

そのエラー

Repository lock acquired.
Please wait; recovering the repository may take some time...
svnadmin: DB_RUNRECOVERY: Fatal error, run database recovery
svnadmin: bdb: /path/to/svn/repos/db/log.0000000134: log file open failed: No such file or directory
svnadmin: bdb: PANIC: No such file or directory
svnadmin: bdb: DB_ENV->log_put: 134: DB_RUNRECOVERY: Fatal error, run database recovery

結局誰が悪いのやら。
家の環境ではそもそも DB_VERSION_MISMATCH にならず。

ファイルの追加失敗

commit成功したあとにupdateに失敗した場合

  • 追加したファイルをいったん rm
  • svn update
  • commit log が残されたままになるので rm

commitメッセージ書いてる横でupdateとかしたら起こりました

TortoiseSVN

  • SSHクライアントが未指定だとわかりにくいエラーメッセージが出て困る
    • enとjpでは出てくるメッセージが違う(そしてどちらも本質を突いていない
  • svn+sshだと、リポジトリの不具合の種類によっては「接続が切れた」程度のエラーしか返さない
    • ssh でマシンにログインして checkout などして原因を調べないといけない

NFS関連

  • FSFSを使うこと
  • NFSサーバで statd, lockd を動かす
    • FreeBSDだとrc.conf.localあたりで
      rpc_lockd_enable="YES"
      rpc_statd_enable="YES"
      とか指定して /etc/rc.d/nfslocking start
      これができていないと lock できないとか言われる

文字コード関連

svn: Can't convert string from native encoding to 'UTF-8'

日本語ファイル名が存在するときに checkout や update をすると起こる。
TortoiseSVN 越しだと接続が途中で切れるのでこのメッセージすら見れない。

# 対処法
# svn に LANG=C なエイリアスをあてている場合は \svn になるので注意
LANG=ja_JP.UTF-8
svn update
# 日本語のファイル名は化けているので svn ls とかでがんばる
svn mv 日本語 NIHONGO
svn commit
LANG=元の
補足
ファイル名が正しくUTF-8かつ LANG=C svn なんてことをしていなければ、
普通に update できるはず。

上記のメモは非UTF-8の日本語ファイル名で保存されてた頃のメモ・・・?
補足2
LANGで一律指定してまうと文字コード変換でハマる場合があるので、
こちらの方が幸せかも(cygwin svn 1.7 は少なくとも)
LC_MESSAGES=C svn

Apache2 越しにアクセス

/var/www 直下に .htaccess なんかを置いてBASIC認証していると、
リポジトリにアクセスしようとしたときに、以下のエラーが出る(コマンドライン svn。

svn: REPORT request failed on '/REPOS_URI/!svn/vcc/default'
svn: Not authorized to open root of edit operation

回避方法としては /REPOS_URI に改めてBASIC認証の設定を書く。

zshの補完が利かない

_svn_command:5: bad set of key/value pairs for associative array

みたいなのが出る。

LC_ALL などによって日本語が指定されている場合や、
SlikSVN のような改行コード CRLF のときなどおかしくなる。
(Cygwin の svn は LF だが日本語ファイル名でハマれる

$(LC_ALL=C _call_program commands svn help | tr -d '\r')

改行の場合は上記のような CR 除去でごまかせる模様。

違うパターン

_arguments:comparguments:312: invalid argument: [--cl]:ARG:
  usage=${${(M)${(f)"$(LC_ALL=C _call_program options svn help $cmd)"}:#usage:*}#usage:*$cmd] }
  args=(
-   ${=${${${(M)${(f)"$(LC_ALL=C _call_program options svn help $cmd)"##*Valid options:}:#* :*}%% #:*}/ ARG/:ARG:}/(#b)-([[:alpha:]]) \[--([a-z-]##)\](:ARG:)#/(--$match[2])-$match[1]$match[3] (-$match[1])--$match[2]$match[3]}
+   ${=${${${(M)${(f)"$(LC_ALL=C _call_program options svn help $cmd)"#(*Valid options:|(#e))}:#* :*}%% #:*}/ (arg|ARG)/:arg:}/(#b)(-##)([[:alpha:]]##) \[--([a-z-]##)\](:arg:)#/(--$match[3])$match[1]$match[2]$match[4] ($match[1]$match[2])--$match[3]$match[4]}
  )

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-05-10 (火) 00:34:28 (4736d)