34

このようなコマンドを実行しようとすると(コマンドラインまたはPerlスクリプトから-関係ありません):

svn revert "build\myfile@test.meta"

SVNはこのファイルをスキップして、以下を出力します。

Skipped 'build\myfile'

私はやってみました:

svn revert "build\*.meta"

しかし、同じ結果が得られます。

GUIからこれらのファイルを元に戻すことができます。そして、私はこれらのファイルを元に戻すことができます(しかしそれは私が望む以上に元に戻します):

svn revert --recursive "build"

これに対する回避策はありますか?

4

4 に答える 4

81

Subversionの@サインインファイル名には、実際には特別な意味があります。つまり、固定されたリビジョン番号です。Subversionの本を引用するには:

知覚的な読者は、おそらくこの時点で、ペグリビジョン構文が実際にサインインしているコピーパスまたはURLの動作に問題を引き起こすかどうか疑問に思っています。結局のところ、svnは、news @ 11が私のツリー内のディレクトリの名前なのか、それとも単に「ニュースのリビジョン11」の構文なのかをどうやって知るのでしょうか。ありがたいことに、svnは常に後者を想定しますが、簡単な回避策があります。パスの最後に、news @11@などのアットマークを追加するだけで済みます。svnは、引数の最後のアットマークのみを考慮し、その後のアットマークのリテラルペグリビジョン指定子を省略することは違法とは見なされません。この回避策は、アットマークで終わるパスにも適用されます。filename@@を使用して、filename@という名前のファイルについて話します。

したがって、次のように、スクリプトのファイル名に@記号を追加する必要があります。

svn revert "build\myfile@test.meta@"
于 2009-12-31T13:20:14.510 に答える
22

上記の正解に付け加えると、名前に「@」記号が含まれるファイルがたくさんあり、バッチで処理したい (つまり * ワイルドカードを使用する) 場合、OS X ターミナルで次のようなことができます (または実際の Linux ボックス):

find . -name "*@*" | xargs -I % svn add %@

上記のコマンドは、find ユーティリティを使用して、ファイル名に @ を含む各ファイルを一覧表示し、XARGS を使用してファイルへのパスを SVN にパイプします。XARGS は、出現する % をそれぞれパスに置き換え、ファイル名の最後に特別な「@」を追加して、SVN がそれを受け入れるようにします。

これが役に立てば幸いです - アプリを iOS4.0 にアップグレードするために必要な gazzilion @2x.png ファイルを追加するために、少し頭を悩ませなければなりませんでした。

于 2010-08-18T11:31:49.197 に答える
2

cmd.exeシェルを使用してWindowsで適切にテストしました-名前を二重引用符で囲むと機能します:

ctmkx> svn revert "trunk\foo@bar.txt"
Reverted 'trunk\foo@bar.txt'
于 2009-12-31T12:44:15.567 に答える
0

どのオペレーティングシステムですか?* nixシステムの場合は、ファイルを「single@quotes」で引用してみてください。

于 2009-12-31T12:20:00.930 に答える