svn
TortoiseSVN
cleanup

Tortoise SVN でクリーンアップに失敗する場合

SVNのUpdateを行った際に困ったためメモしておく。

Please execute the 'Cleanup' command

Update等の操作を行った際に以下のエラーが出ることがある。

Cleanupエラー
Error:Previous operation has not finished; run 'cleanup' if it was interrupted
Error:Please execute the 'Cleanup' command

1行目のエラーのみの場合は、通常Cleanupを行えばエラーが出なくなるが、2行目のエラーも併せて出てくる場合、Cleanupを何度行っても同じエラーが出続けて何もできなくなった。。。
ちなみにUpdate対象となったファイルはJARファイルで、ローカルで更新をしていた。

ググってみたところ、SVNのDBに問題が起こっているらしいとのこと。
https://qiita.com/ftcb_cml/items/d648231094517588b421

sqliteさえあればデータ削除でいけるとのことだが、仕事先ではsqliteは使用しておらず勝手なインストールもできないため、この方法は断念した。

上記に「ロック」というキーワードが出てきていたので、クリーンアップ時の選択オプションを見直すとそれらしい選択項目を発見。
「Break locks」
試しにチェックをつけて実行したところ、Cleanupが正常終了した。
Tortoise SVN のサイトの記述を確認したところ以下の通りだった。
チェックすると、作業コピーデータベースからすべての書き込みロックを強制解除します。多くの場合、作業をクリーンアップするために必要です。
https://tortoisesvn.net/docs/nightly/TortoiseSVN_ja/tsvn-dug-cleanup.html

上記から原因と対策を推測

恐らくだが、JARのようなマージ不可能なファイルに対して、ローカル更新あり、SVNサーバ更新ありの状態となった場合は、このような事象が発生する。
このため、事象発生時はCleanupコマンドのオプション「Break locks」を指定して実行する必要がある。

注意

ちなみに、「Break locks」を指定してCleanupが正常終了した際のJARファイルは、SVNサーバ上のファイルで更新されており、ローカル更新が破棄されていた。
この時はローカルの更新内容は不要であったため問題がなかったが、ローカルの更新を優先したい、もしくは手動でマージしたい(ファイルがExcel等のマージできるものに限る)場合は、バックアップを取ってから実行したほうが良いと思う。