Подтвердить что ты не робот

Почему Subversion пропускает файлы, содержащие символ @?

когда я пытаюсь выполнить команду вроде этого (из командной строки или Perl script - это не имеет значения):

svn revert "build\[email protected]"

SVN пропускает этот файл и выдает:

Skipped 'build\myfile'

Я пробовал делать:

svn revert "build\*.meta"

Но он дает тот же результат.

Я могу вернуть эти файлы из графического интерфейса. И я могу отменить эти файлы, выполнив (но он вернется больше, чем я хочу):

svn revert --recursive "build"

Есть ли обходной путь для этого?

4b9b3361

Ответ 1

Знаки @в именах файлов в Subversion на самом деле имеют особое значение - привязанный номер ревизии. Чтобы процитировать книгу Subversion:

Проницательный читатель, вероятно, сейчас задается вопросом, вызывает ли синтаксис ревизии привязки проблемы для рабочих путей копирования или URL-адресов, которые на самом деле имеют знаки в них. В конце концов, как svn знает, является ли news @11 именем каталога в моем дереве или просто синтаксисом для "редакции 11 новостей"? К счастью, в то время как svn всегда будет считать последнее, существует тривиальное обходное решение. Вам нужно добавить только знак в конец пути, например news @11 @. svn заботится только о последнем знаке в аргументе, и это не считается незаконным, чтобы опустить спецификатор спецификации литеральной привязки после этого при знаке. Это обходное решение применимо даже к путям, которые заканчиваются знаком "sign" - вы будете использовать filename @@для обсуждения файла с именем filename @.

Итак, вы должны добавить знак @в имена файлов в сценариях, например:

svn revert "build\[email protected]@"

Ответ 2

Чтобы добавить к правильному правилу ответ, если у вас много файлов с символом "@" в их имени, которое вы хотите обрабатывать в пакетном режиме (например, используйте * подстановочный знак), вы можете сделать что-то подобное в ОС X Terminal (или любой Linux-блок):

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

Вышеприведенная команда будет использовать утилиту find для перечисления каждого файла с @в своем имени файла, а затем передать путь к файлу в SVN с помощью XARGS. XARGS заменит каждое вхождение% на путь и добавит специальный "@" в конце имени файла, чтобы SVN принял его.

Надеюсь, что это поможет - мне пришлось немного ударить головой, чтобы добавить файлы gazzilion @2x.png, которые были необходимы для обновления моего приложения для iOS4.0

Ответ 3

Просто протестировать его правильно на окнах, используя оболочку cmd.exe, - заключая имя в двойные кавычки:

ctmkx> svn revert "trunk\[email protected]"
Reverted 'trunk\[email protected]'

Ответ 4

Какая операционная система? Если это * nix-система, попробуйте указать свой файл с помощью "одиночных @кавычек".