3

У меня есть SVN-репозиторий (версия 1.9.2), и я использую клиент TortoiseSVN (версия 1.9.2) на компьютере с Windows 7 (x64). Существуют скриптовые скрипты на стороне клиента (start-commit, pre-commit и post-commit), которые хранятся в репозитории и, конечно, доступны в локальной рабочей копии. Эти сценарии устанавливаются с использованием специальных свойств tsvn:startcommithook , tsvn:precommithook и tsvn:postcommithook , каждый из которых указывает на соответствующий файл сценария с помощью переменной %REPOROOT% чтобы избежать необходимости указывать абсолютный путь рабочей копии.

Когда я фиксирую изменения в репозитории, все скрипты хуков (командные файлы, .bat) работают нормально.

Однако, когда я пытаюсь зафиксировать изменения в файлах по коммутируемому пути, появляется следующая ошибка:

И фиксация не может быть выполнена после подтверждения сообщения, диалог фиксации не появляется.

Я полагаю, что эта ошибка не вызывается скриптами ловушек (потому что нет изменений, когда я пишу exit 0 или exit 1 в скрипты как единственную команду), но TortoiseSVN при попытке их выполнить, что, по некоторым причинам, кажется чтобы больше не было возможности найти соответствующий скрипт.

Итак, как я могу использовать подключаемые скрипты, которые находятся в репозитории и, следовательно, в рабочей копии?


Замена переменной %REPOROOT% полными абсолютными путями не меняет поведение вообще.

Когда я заменяю переменную %REPOROOT% на %REPOROOT+% в tsvn:*commithook , для переключаемых путей ничего не меняется (поэтому появляется вышеупомянутое сообщение об ошибке), но для стандартных путей не выполняется сценарий подключения и после сообщения об ошибке не возникает все.


Как примечание: чтобы проверить, выполняется ли попытка запуска сценария перехвата, я полагаюсь на появление диалогового окна TortoiseSVN для утверждения / отклонения:
Утвердить или отклонить скрипт подключения на стороне клиента

2 ответа2

1

Хорошо, хотя это (еще) не полностью отвечает на вопрос, я начинаю ответ здесь и сейчас, и я заполню его любыми новыми находками ...


Работа-Around

Чтобы обойти эту проблему, просто зафиксируйте родительский каталог пути коммутатора, а не сам коммутируемый путь или его дочерний элемент.

Просто чтобы упомянуть это: это не меняет поведение, чтобы рекурсивно применять свойство скрипта ловушки.


Синтаксис для Hook Script Path (свойства tsvn:*hook)

Прежде всего, при указании пути к скрипту подключения очень важно, чтобы, как только вы использовали один из заполнителей %REPOROOT% или %REPOROOT+% , вы использовали косую черту / в качестве разделителя пути. Я полагаю, что это связано с тем фактом, что эти переменные содержат внутренний URL-адрес корня хранилища в соответствии с документацией , но не путь к локальной рабочей копии (WC). Для фиксированных локальных путей допускается как прямая косая черта / и обратная косая черта \ .
Если путь содержит пробелы , вы должны поместить его в кавычки; Вы можете использовать цитату в целом, так как она не наносит вреда.


Нормальный и коммутируемый путь, уровни каталогов

Предположим, у нас есть репозиторий в D:\TEST\repo содержащий /trunk , /branches , /tags и /hooks на верхнем уровне, скрипт script.bat в /hooks с выходом содержимого exit 0 , файл с именем file.txt в /trunk , ветвь /trunk в /branch /branches/test и другая ветвь /trunk в /branch ; WC проверяется в D:\TEST\wc , но у нас есть редкая проверка, так что там только /trunk и /hooks (оба полностью рекурсивно).

Затем установите новое свойство tsvn:startcommithook в корне WC, например:
Диалог настройки свойств Hook Script

Теперь попробуйте зафиксировать что-нибудь в любом месте WC (root, /trunk и т.д.); Появится диалоговое окно подтверждения / отклонения сценария перехвата, в котором показан следующий путь сценария перехвата, который является правильным, поэтому скрипт фактически запускается после нажатия кнопки «Выполнить»:
Диалог подтверждения / отклонения скриптов

Теперь переключите локальный путь WC для D:\TEST\wc\trunk в /branch /branches/test , затем попытайтесь зафиксировать локальный файл WC file.txt ; в этот раз в диалоговом окне подтверждения / отклонения отображается следующий неверный путь:
Диалог подтверждения / отклонения скриптов

При нажатии «Выполнить» скрипт не может быть выполнен, очевидно:
Ошибка выполнения скриптов хука

Но при переключении локального пути WC для D:\TEST\wc\trunk в /branch сейчас и попытке зафиксировать локальный файл WC file.txt , диалог подтверждения / отклонения снова показывает правильный путь, как описано выше , и сценарий может запустить.

Таким образом, очевидно, что различная глубина на уровне иерархии каталогов нормального и коммутируемого путей, кажется, препятствует правильному расширению заполнителя %REPOROOT% .
Это поведение точно такое же, если скрипт хука был зафиксирован или нет.

0

У меня была похожая проблема. Я переключился на% REPOROOT+%, чтобы он работал после ветвления (копинга).

Что касается сценария, я запустил пакетный файл и добавил эту строку, чтобы он запускался из местоположения пакетного файла, а не из папки запуска:

кд / д% ~ дп0

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .