Как избежать @символов в именах управляемого файла Subversion?
Для многих операций Subversion добавление символа '@' в конец файла или аргумента URL позволяет вам настроить таргетинг на определенную ревизию этого файла. Например, "svn info [email protected]" предоставит информацию о test.txt, как она существовала в редакции 1234.
Однако, когда имя файла содержит @, оно неверно интерпретируется Subversion как спецификатор ревизии:
svn info 'test @.txt' svn: Ошибка синтаксического анализа синтаксиса '.txt'
Я пробовал двойные и одинарные кавычки, а также экранировал '/', '\' и '@'. Как я могу сказать Subversion рассматривать символы @как часть имени файла?
Ответы
Ответ 1
Из SVN book (выделено мной):
Проницательный читатель, вероятно, сейчас задается вопросом, вызывает ли синтаксис ревизии привязки проблемы для рабочих путей копирования или URL-адресов, которые на самом деле имеют знаки в них. В конце концов, как svn знает, является ли [email protected]
именем каталога в моем дереве или просто синтаксисом для "редакции 11 новостей"? К счастью, в то время как svn всегда будет считать последнее, существует тривиальное обходное решение. Вам нужно добавить только знак "до" в конце пути, например [email protected]@
. svn заботится только о последнем знаке в аргументе, и это не считается незаконным, чтобы опустить спецификатор спецификации литеральной привязки после этого при знаке. Этот обходной путь применим даже к путям, которые заканчиваются знаком на знаке - вы должны использовать [email protected]@
для обсуждения файла с именем filename @.
Ответ 2
Оригинальный ответ правильный, но, возможно, недостаточно явный. Конкретные параметры командной строки unix следующие:
svn info '[email protected]@'
или
svn info "[email protected]@"
или
svn info image\@2x.png\@
Я только что проверил все три.
Ответ 3
Решение для добавления нескольких файлов в разные подпапки:
for file in $(find ./ -type f -name "*@*.png"); do svn add [email protected]; done
Просто замените "png" в "@.png" на файлы, которые вы хотите добавить.
Ответ 4
чтобы добавить следующий файл: [email protected], выполните следующие действия:
svn добавить изображение \@2x.png @
Ответ 5
В моем случае мне нужно было удалить файлы из репо SVN, содержащего знак @:
Это не сработает:
svn remove 'src/assets/images/hi_res/[email protected]'
Но это произошло:
svn remove 'src/assets/images/hi_res/[email protected]@'
Ответ 6
Чтобы добавить несколько файлов, существует альтернативное решение:
svn status | grep \.png | awk '{print $2"@"}'| xargs svn add
Ответ 7
Просто добавьте
@
в файле, который вам нужно использовать, независимо от того, какую команду SVN он имеет, например:
[email protected]
к
[email protected]@
Ответ 8
Для команд svn с двумя аргументами, такими как "move", вы должны добавить "@" только в левый (первый) параметр. Например:
$ svn add [email protected]@
A [email protected]
$ svn move [email protected]@ [email protected]
A [email protected]
D [email protected]
$ svn status
A [email protected]
$ svn commit -m "blah"
Adding [email protected]
Transmitting file data .
Committed revision 168.
$ svn delete [email protected]@
D [email protected]
$ svn commit -m "blahblah"
*Deleting [email protected]
Committed revision 169.
Эта строка важна: $svn move README @txt @README2 @txt
Как вы можете видеть, нам не нужно добавлять "@" в "README2 @txt"
Ответ 9
@David H
Я просто попробовал аналогичную команду, не избегая символа @, и она все еще отлично работает
svn ci splash.png [email protected]@
Это находится в GNU bash, версии 3.2.48 (1) -release (x86_64-apple-darwin10.0) и svn 1.6.16