когда я пытаюсь выполнить команду как это (от командной строки или сценария Perl - это не имеет значения):
svn revert "build\myfile@test.meta"
SVN пропускает этот файл и выводы:
Skipped 'build\myfile'
Я пытался делать:
svn revert "build\*.meta"
Но это дает тот же результат.
Я могу вернуться эти файлы от GUI. И я могу вернуться эти файлы путем выполнения (но это возвращается больше, чем я хочу):
svn revert --recursive "build"
Существует ли обходное решение для этого?
Знак @ в именах файлов в Subversion на самом деле имеет особое значение - привязанный номер ревизии. Цитируя Subversion book:
Проницательный читатель, вероятно, задается вопросом, вызывает ли синтаксис привязанных ревизий проблемы для путей рабочей копии или URL, которые на самом деле имеют в них знаки. В конце концов, как svn узнает, является ли news@11 именем каталога в моем дереве или просто синтаксисом для "ревизии 11 новостей"? К счастью, в то время как svn всегда будет предполагать последнее, есть тривиальный обходной путь. Вам нужно только добавить в конец пути at sign, например news@11@. svn заботится только о последнем at sign в аргументе, и не считается незаконным опускать после этого буквальный спецификатор ревизии peg at sign. Этот обходной путь применим даже к путям, которые заканчиваются на знак - вы бы использовали filename@@, чтобы говорить о файле с именем filename@.
Итак, вы должны добавить знак @ к именам файлов в скриптах, например:
svn revert "build\myfile@test.meta@"
Только что протестировал его правильно на окнах с помощью оболочки cmd.exe - заключение имени в двойные кавычки работает:
ctmkx> svn revert "trunk\foo@bar.txt"
Reverted 'trunk\foo@bar.txt'
Какая операционная система? Если это *nix-система, попробуйте процитировать файл с 'single@quotes'.
.Просто чтобы добавить к приведенному выше правильному ответу, если у вас есть много файлов с символом «@» в их имени, которые вы хотите обработать в пакете (например, использовать подстановочный знак *), вы можете сделать что-то подобное в ОС X Terminal (или на самом деле любой Linux):
find . -name "*@*" | xargs -I % svn add %@
Приведенная выше команда будет использовать утилиту find для вывода списка каждого файла с @ в его имени, а затем перенаправить путь к файлу в SVN с помощью XARGS. XARGS заменит каждое вхождение% на путь и добавит специальный символ «@» в конце имени файла, чтобы SVN его принял.
Надеюсь, это поможет - мне пришлось немного ударить головой, чтобы добавить файлы gazzilion @ 2x.png, необходимые для обновления моего приложения до iOS4.0