Хорошо, хотя это (еще) не полностью отвечает на вопрос, я начинаю ответ здесь и заполню его любыми новыми данными ...
Работа-Around
Чтобы обойти эту проблему, просто зафиксируйте родительский каталог пути коммутатора, а не сам коммутируемый путь или его дочерний элемент.
Просто чтобы упомянуть это: это не меняет поведение, чтобы рекурсивно применять свойство скрипта ловушки.
Синтаксис для пути скрипта хука (свойства tsvn:*hook
)
Прежде всего, при указании пути к скрипту-ловушке очень важно, чтобы, как только вы использовали один из заполнителей %REPOROOT%
или %REPOROOT+%
, вы использовали косую черту /
в качестве разделителя пути. Я полагаю, что это связано с тем фактом, что эти переменные содержат внутренний URL-адрес корня хранилища в соответствии с документацией, но не путь к локальной рабочей копии (WC). Для фиксированных локальных путей допускается как прямая, так /
и обратная косая черта \
.
В случае, если путь содержит SPACEs, вы должны поставить его между кавычками; Вы можете использовать цитату в целом, так как она не наносит вреда.
Нормальный и коммутируемый путь, уровни каталогов
Допустим, у нас есть хранилище на D:\TEST\repo
содержащий /trunk
, /branches
, /tags
и /hooks
на высшем уровне, сценарий script.bat
в /hooks
с содержимым exit 0
, файл с именем file.txt
в /trunk
филиала /trunk
в /branches/test
и другой ветви /trunk
на /branch
; WC проверен в D:\TEST\wc
, но у нас есть редкая проверка, так что только /trunk
и /hooks
есть (оба полностью рекурсивно).
Затем установите новое свойство tsvn:startcommithook
в корне WC, например:
Теперь попробуйте зафиксировать что-нибудь в любом месте WC (root /trunk
и т. Д.); Появится диалоговое окно подтверждения / отклонения сценария перехвата, показывающее следующий путь сценария перехвата, который является правильным, поэтому скрипт фактически запускается при нажатии «Выполнить»:
Теперь переключите локальный путь D:\TEST\wc\trunk
к WC на /branches/test
, затем попробуйте зафиксировать локальный файл WC.file.txt
; в этот раз в диалоговом окне подтверждения / отклонения отображается следующий неверный путь:
При нажатии «Выполнить» скрипт не может быть выполнен, очевидно:
Но при переключении локального пути WC D:\TEST\wc\trunk
на /branch
сейчас и попытке зафиксировать локальный файл WCfile.txt
, диалоговое окно подтверждения / отклонения снова показывает правильный путь, как описано выше, и сценарий может выполняться.
Таким образом, очевидно, что различная глубина на уровне иерархии каталогов нормального и коммутируемого путей, кажется, препятствует правильному расширению заполнителя %REPOROOT%
.
Это поведение точно такое же, если скрипт хука был зафиксирован или нет.