Para muitas operações do Subversion, acrescentar o símbolo ‘@’ ao final de um argumento de arquivo ou URL permite que você direcione uma revisão específica desse arquivo. Por exemplo, “svn info test.txt@1234″ fornecerá informações sobre o test.txt como ele existia na revisão 1234.
No entanto, quando o nome do arquivo contém um @, ele é interpretado incorretamente pelo Subversion como um especificador de revisão:
svn info ‘test @ .txt’ svn: Erro de syntax analisando a revisão ‘.txt’
Eu tentei aspas duplas e simples, bem como escaping com ‘/’, ‘\’ e ‘@’. Como posso dizer ao Subversion para tratar os símbolos @ como parte do nome do arquivo?
Do livro do SVN (ênfase adicionada):
O leitor perspicaz provavelmente está se perguntando, neste ponto, se a syntax da revisão de rastreio causa problemas para caminhos de cópia de trabalho ou URLs que realmente possuem sinais nos mesmos. Afinal, como o svn sabe se
news@11
é o nome de um diretório em minha tree ou apenas uma syntax para “revisão 11 de notícias ”? Felizmente, enquanto o svn sempre assumirá o último, existe uma solução trivial. Você precisa apenas append um sinal de arroba no final do caminho , comonews@11@
. svn se importa apenas com o último sinal no argumento, e não é considerado ilegal omitir um especificador de revisão de indexação literal depois disso no sinal. Essa solução alternativa se aplica até mesmo aos caminhos que terminam em um arroba — você usaria ofilename@@
para falar sobre um arquivo denominado filename @ .
A resposta original está correta, mas talvez não seja explícita o suficiente. As opções específicas da linha de comandos do unix são as seguintes:
svn info 'image@2x.png@'
ou
svn info "image@2x.png@"
ou
svn info image\@2x.png\@
Eu acabei de testar todos os três.
Solução para adicionar vários arquivos em diferentes subpastas:
for file in $(find ./ -type f -name "*@*.png"); do svn add $file@; done
Basta replace o “png” em ” @ .png” para o tipo de arquivos que você deseja adicionar.
para adicionar o seguinte arquivo: image@2x.png faça o seguinte: svn add image \ @ 2x.png @
No meu caso, eu precisava remover arquivos de um repository SVN que continha um sinal @:
Isso não funcionaria:
svn remove 'src/assets/images/hi_res/locales-usa@2x.png'
Mas isso fez:
svn remove 'src/assets/images/hi_res/locales-usa@2x.png@'
Para adicionar vários arquivos, existe uma solução alternativa:
svn status | grep \.png | awk '{print $2"@"}'| xargs svn add
Basta adicionar
@
no arquivo que você precisa usar, não importa o comando SVN, por exemplo:
file@2x.jpg
para
file@2x.jpg@
Para comandos svn com 2 argumentos como “move”, você deve append “@” apenas no parâmetro left (first). Por exemplo:
$ 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.
Esta linha é importante: $ svn move README @ txt @ README2 @ txt
Como você pode ver, não precisamos acrescentar “@” em “README2 @ txt”
@ David H
Eu apenas tentei um comando similar sem escaping dos símbolos @ e ainda funciona bem
svn ci splash.png splash@2x.png@
Isso é no bash do GNU, versão 3.2.48 (1) -release (x86_64-apple-darwin10.0) e svn 1.6.16
A única solução que funcionou para mim foi a mesma sugerida pela @NPike
svn revert ‘caminho / para / nome do arquivo @ ext @’
Eu tive o problema hoje com nomes de arquivos gerados a partir de endereços de e-mail (não é uma boa idéia!).
Solução, usando opções de printf
de find
e expansão de shell
svn add $(find . -name "*@*.png" -printf "%p@ ")