SVN Post Commit Hook Batch Windows

У меня есть Windows Server с Visual SVN Server для хранения наших репозиториев. Также на этом сервере находится наша тестовая копия.

Я пытаюсь настроить простой хук после фиксации SVN, чтобы он обновлял эту тестовую копию автоматически каждый раз, когда я что-то фиксирую

В Visual SVN в хуках post-commit я настроил вот так

"C:\Program Files (x86)\VisualSVN Server\bin\updatescripts.bat" D:\inetpub\TESTCOPY

Затем этот пакетный файл имеет простое обновление, как это

PATH=%PATH%;"C:\Program Files (x86)\VisualSVN Server\bin\"
svn update %1

Если я запускаю командный файл на сервере, дважды щелкнув по нему или из командной строки, работает нормально. При фиксации чего-либо с моего ноутбука он зависает, не выдает никаких ошибок и блокирует тестовую копию, поэтому мне нужно войти и запустить очистку.

Сервис Visual SVN работает как сетевой сервис, и этот аккаунт имеет полный доступ к папке bin и тестовой копии на сервере.

Любая идея, как настроить простой коммит крюк пост обновления SVN кто-нибудь?

Спасибо Феде

4 ответа

У меня была похожая проблема, и оказалось, что SVN любит пути для использования прямой косой черты вместо обратной.

Попробуй это:

set MYPATH=%1

:: Transform backslashes to forward slashes
set MYPATH=%MYPATH:^\=/%

svn update %MYPATH%

Вы управляете svn update команда. Какую рабочую копию вы пытаетесь обновить?

Передаваемый параметр - это путь к хранилищу. Это указывает не на рабочий каталог, а на каталог, который содержит главный репозиторий Subversion. Это тот же каталог, в котором хранится ваш пост-коммит.

У хуков Subversion нет доступа к рабочему каталогу пользователя, поэтому вы не можете манипулировать файлами пользователя. Хук-скрипты обычно должны использовать svnlook и не svn, Делая это, вы предотвращаете себя от каких-либо неприятностей.

Можно обновить рабочую копию Subversion на сервере, если вы знаете местоположение:

PATH=%PATH%;"C:\Program Files (x86)\VisualSVN Server\bin\"
set SVN_WORK_DIR=C:\SVN\workdir"
svn update %SVN_WORK_DIR%

Тем не менее, я бы не рекомендовал это, потому что это связывает Subversion. Пользователь, который сделал фиксацию, должен будет дождаться завершения обновления, прежде чем Subversion вернет управление приглашением обратно пользователю.

Это действительно не так, как вы хотите это сделать. Что вы должны сделать, это использовать что-то вроде Дженкинса, чтобы посмотреть ваш репозиторий. Jenkins может наблюдать за вашим репозиторием, и когда он меняется, обновлять вашу тестовую копию, запускать сборки, запускать автоматические тесты и т. Д.

Попробовав миллион разных вещей, это сработало для меня...

Я помещаю это в свой хук после фиксации: "C:\Program Files\VisualSVN Server\bin\svn.exe", обновление "C:\my path\", где мой путь - это путь к рабочей копии, подлежащей обновлению.

Также мне пришлось поменять сервис для запуска в качестве локальной системы

Другие вопросы по тегам