web-dev-qa-db-ja.com

Subversionが管理するファイル名の@文字をエスケープする方法は?

多くのSubversion操作では、ファイルまたはURL引数の末尾に「@」記号を追加すると、そのファイルの特定のリビジョンをターゲットにできます。たとえば、「svn info test.txt@1234」は、リビジョン1234に存在していたtest.txtに関する情報を提供します。

ただし、ファイルの名前に@が含まれている場合、Subversionはリビジョン指定子として誤って解釈します。

svn info 'test @ .txt' svn:リビジョン '.txt'の構文解析エラー

「/」、「\」、「@」でエスケープするだけでなく、二重引用符と単一引用符を試しました。 @記号をファイル名の一部として扱うようにSubversionに指示するにはどうすればよいですか?

189
weston

SVN book (強調を追加)から:

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

281
Rob Kennedy

元の答えは正しいですが、おそらく十分に明確ではありません。特定のUNIXコマンドラインオプションは次のとおりです。

svn info '[email protected]@'

または

svn info "[email protected]@"

または

svn info image\@2x.png\@

3つすべてをテストしました。

82
David H

異なるサブフォルダーに複数のファイルを追加するためのソリューション:

for file in $(find ./ -type f -name "*@*.png"); do svn add $file@; done

@。png」の「png」を追加するファイルの種類に置き換えるだけです。

14
Lcsky

次のファイルを追加するには:[email protected]次の手順を実行します。svn add image\@ 2x.png @

11
Malek Belkahla

単に追加する

@

使用する必要があるファイルでは、SVNコマンドが何であっても、例えば:

[email protected]

[email protected]@

私の場合、@記号を含むSVNリポジトリからファイルを削除する必要がありました。

これは機能しません:

svn remove 'src/assets/images/hi_res/[email protected]'

しかし、これは:

svn remove 'src/assets/images/hi_res/[email protected]@'
8
NPike

複数のファイルを追加するには、代替ソリューションがあります。

svn status | grep \.png | awk '{print $2"@"}'| xargs svn add
5
liruqi

「move」のような2つの引数を持つsvnコマンドの場合、「@」を追加する必要がありますonly左(最初の)パラメーター。例えば:

$ svn add README@txt@
A         README@txt

$ svn move README@txt@ README2@txt
A         README2@txt
D         README@txt


$ svn status
A       README2@txt

$ svn commit -m "blah"
Adding         README2@txt
Transmitting file data .
Committed revision 168.

$ svn delete README2@txt@
D         README2@txt

$ svn commit -m "blahblah"
*Deleting       README2@txt

Committed revision 169.

この行は重要です:$ svn move README @ txt @ README2 @ txt

ご覧のとおり、「README2 @ txt」に「@」を追加する必要はありません。

1
Srdjan

@デビッドH

私は@記号をエスケープせずに同様のコマンドを試しましたが、それでもうまくいきます

svn ci splash.png [email protected]@

これはGNU bash、バージョン3.2.48(1)-release(x86_64-Apple-darwin10.0)およびsvn 1.6.16にあります

0
Qazzian

今日、電子メールアドレスから生成されたファイル名に問題がありました(あまり良い考えではありません!)。

解決策、printffindオプションとシェル展開を使用

 svn add  $(find . -name "*@*.png" -printf "%p@ ")
0
Michel Billaud

私のために働いた唯一の解決策は、@ NPikeによって提案されたものと同じでした

svn revert 'path/to/filename @ ext @'

0
Jonyx4