Как избежать @символов в именах управляемого файла 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