Gマイナー志向

とくに意味はありません

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先生に助けてもらった。

@matsuu せんせー,今度は完璧だぜ!!1 : svn rm --force 'bar@baz'@HEADless than a minute ago via web

http://twitter.com/hiyuh/status/12945639292

はい、ということでこれでもOKです。

$ svn revert bar\@baz@HEAD

これは気づかんよ

ちなみに

@hiyuh先生によると、バージョン1.4.4ならrm --forceでも消えたそうです。
TortoiseSVNだとどうなんだろう。未確認。