@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

= svnでcommit失敗

[2010-11-20 20:35:18]
>>>[svn]
cf.svn - Strange problem with Subversion - "File already exists" when trying to recreate a directory that USED to be in my repository - Stack Overflow

svn: Commit failed (details follow):
svn: File already exists: filesystem '/path/to/repo/db', transaction '数字-r', path '/working/directory/dir'

こんなんでました.

ディレクトリを消したあとに同名のディレクトリを持ってきたりして,なんせ同じ名前のディレクトリがすでにリポジトリ上にはありまっせ.みたいなエラーだと思います

解決法

dirというディレクトリをaddしてcommitしたらこのエラーになったとします.

  • dirの退避
/working/directory% mv dir dir-

こんな感じにどける

/working/directory% svn update
  • svnでdirを削除
/working/directory% svn rm dir
  • 退避したディレクトリから.svnディレクトリを削除

zshならこれで消える

/working/directory% echo ./**/.svn   # 何が消されるか確認
/working/directory% rm -Rf !!:$      # !!:$ は直前のコマンドの最後の引数

bashならfindと組み合わせるのかな?(これは未確認)

/working/directory$ find -name '.svn' -exec rm -rf {} \;
  • dirを戻す
/working/directory% mv dir- dir
  • svnにコミットする
/working/directory% svn add dir
/working/directory% svn commit -m 'recover dir'

こんなもんでしょうか