У меня есть репозиторий SVN, который я настроил около месяца назад, и после некоторых усилий получил хук после фиксации, работающий для обновления рабочей копии моего веб-сайта на сервере разработки. Несколько дней все работало нормально, а вчера вдруг перестало.
Я запускаю VisualSVN Server с сервера в своей сети. Насколько я знаю, ничего не изменилось ни на веб-сервере, ни на сервере, на котором размещен сервер VisualSVN. Сервер VisualSVN не показывает никаких событий в средстве просмотра событий за последние несколько дней, поэтому я не могу увидеть, есть ли ошибка, и я не могу найти какие-либо файлы журналов, относящиеся к SVN. Когда я запускаю «svn log», он ничего не показывает, кроме коммитов. Я не уверен, что он показал бы ошибку, если бы она была.
Вот очищенная копия работающего скрипта:
@ECHO OFF
setlocal enableDelayedExpansion
svnlook dirs-changed %1 -r %2 | findstr /b /i "trunk"
IF %ERRORLEVEL% EQU 0 (
FOR /F "tokens=2" %%a IN ('svnlook changed %1 -r %2') DO (
SET NEWA=%%a
SET "NEWB=!NEWA:trunk/=!"
svn update \\<server-name>\<share>\dev\<working-copy-directory>\!NEWB! --username <svnuser> --password <svnpass>)
)
endlocal
Я также проверил наличие блокировок на сервере и не нашел ни одной, а также запустил очистку рабочей копии на моем сервере DEV, но все безрезультатно. Я также попытался выполнить обновление с другой рабочей станции, просто чтобы посмотреть, может ли это быть моя локальная машина, и она по-прежнему не работает должным образом. Наконец, я также попытался запустить скрипт из командной строки, и он запускается и обновляет рабочую копию, как и должно быть. На самом деле кажется, что сервер просто не запускает его.
Любая помощь в отладке этой проблемы приветствуется.
ОБНОВЛЕНИЕ: Найдя некоторые стратегии отладки, я смог подтвердить, что хук действительно работает, включив следующую команду:
echo hook ran at %date% %time% >> debug.txt
Это зарегистрировало фиксацию, как и следовало ожидать. Я также включил аналогичный код отладки, чтобы убедиться, что хук ловит правильный ствол/ветвь, что и было, и я также заставил его регистрировать каталог перед обновлением, поэтому я знал, что он собирался выполнить эту команду. Все, что он сделал. Затем, пытаясь записать ответ сервера, я изменил код обновления на следующий:
svn update \\<server-name>\<share>\dev\<working-copy-directory>\!NEWB! --username <svnuser> --password <svnpass> >> debug.txt)
Это вообще ничего не возвращает. Я в полной растерянности по этому поводу.
ОБНОВЛЕНИЕ 2: я не получил этого раньше, когда тестировал эту проблему, но теперь, когда я запускаю команду самостоятельно...
svn update \\<server>\<share>\dev\<working-copy>\ScriptContent\test.cfm --username <svnuser> --password
Он возвращает «svn: E020024: Ошибка разрешения случая» и выдает путь, который я только что дал.
Я пытался найти в Google некоторые источники этой проблемы, но единственное, что я нашел, предлагает переключить обратную косую черту на косую черту, но возвращает ту же самую ошибку, но с косой чертой, переключенной обратно на обратную косую черту.
ОБНОВЛЕНИЕ 3. Чтобы проверить, была ли ошибка связана с сервером, работающим как сетевая служба, и попыткой получить доступ к рабочей копии через путь UNC, я попытался изменить службу на работу от моего имени, подключить сетевой диск и использовать этот подключенный диск в сценарии. Этот тест не дал мне ошибок, но не выполнил обновление.
Кроме того, чем больше я об этом думаю, тем больше я думаю об ошибке, которую я получал из командной строки в ОБНОВЛЕНИИ 2 выше, вероятно, не то, что происходит при запуске скрипта, поскольку экран фиксации на стороне клиента (запущенный TortoiseSVN) покажет мне ошибка. Он не показывает никаких ошибок.
Итак, это то, что я знаю.
- Скрипт работал нормально несколько дней
- Скрипт внезапно перестал работать где-то на выходных
- Никаких изменений не было внесено ни на сервер, на котором размещена рабочая копия, ни на сервер, на котором работает репозиторий.
- Ловушка не генерирует никаких ошибок (поскольку они будут отображаться на экране фиксации TortoiseSVN).
- Команда обновления svn не выполняется.
Я в полной растерянности.
echo svn update \\<server-n ... >> debug.txt
. Содержит ли ваш пароль, имя сервера, общий ресурс или каталог рабочей копии проблемные символы, например один из)&,;:<>|
? - person jeb   schedule 06.11.2013