svnでファイル名に@が含まれるファイルをrevert/rmする方法
ハマった。
@入りのファイルを間違ってバージョン管理下におくと、svn的に消せない/戻せない状況に陥る。確認したバージョンは1.6.9。
再現方法
svn cpで@入りのファイルを生成する。
$ touch foo $ svn add foo $ svn cp foo bar@baz $ svn status A bar@baz A foo
はい、じゃあrevertしてみてください。まずはfooを。これは普通にできる。
$ svn revert foo Revert 'foo'
同じようにbar@bazも消してみますかね。
$ svn revert bar@baz svn: 'bar' does not exist $ svn revert bar\@baz Skipped 'bar'
え?revertできない。あーリビジョン記法になってるのね。ということはこうかな?
$ svn revert 'bar@baz' Skipped 'bar' $ svn revert 'bar\@baz' Skipped 'bar\' $ svn rm --force bar\@baz svn: 'bar' does not exist
どうやっても戻せない、消せない。困った。
模範解答
@hiyuh先生に助けてもらった。
http://twitter.com/hiyuh/status/12945639292
はい、ということでこれでもOKです。
$ svn revert bar\@baz@HEAD
これは気づかんよ
ちなみに
@hiyuh先生によると、バージョン1.4.4ならrm --forceでも消えたそうです。
TortoiseSVNだとどうなんだろう。未確認。