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

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

svn revert "build\myfile@test.meta"

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

Skipped 'build\myfile'

Я пытался делать:

svn revert "build\*.meta"

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

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

svn revert --recursive "build"

Существует ли обходное решение для этого?

34
задан user7116 26 October 2011 в 23:42
поделиться

4 ответа

Знак @ в именах файлов в 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@"
80
ответ дан 27 November 2019 в 16:06
поделиться

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

ctmkx> svn revert "trunk\foo@bar.txt"
Reverted 'trunk\foo@bar.txt'
2
ответ дан 27 November 2019 в 16:06
поделиться

Какая операционная система? Если это *nix-система, попробуйте процитировать файл с 'single@quotes'.

.
0
ответ дан 27 November 2019 в 16:06
поделиться

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

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

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

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

22
ответ дан 27 November 2019 в 16:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: