Ответ 1
Я изучил этот вопрос и сумел заставить его работать. Есть несколько незначительных проблем, но они могут быть обработаны.
В этой задаче есть три различных части:
-
Часть TortoiseSVN - получение TortoiseSVN для вставки Bugid и гиперссылки в журнал svn
-
Часть FogBugz - получение FogBugz для вставки информации SVN и соответствующих ссылок
-
Часть WebSVN - убедитесь, что ссылки из FogBugz действительно работают
Инструкции для части 1 приведены в другом ответе, хотя на самом деле это больше, чем требуется. Материал о крючках на самом деле для части 2, и, как указано, это не работает "из коробки"
Просто для подтверждения, мы рассматриваем использование TortoiseSVN БЕЗ сервера SVN (то есть файловые репозитории)
Я получаю доступ к репозиториям с использованием UNC-путей, но также работает для локальных дисков или подключенных к ним дисков.
Все это работает с TortoiseSVN v1.5.3 и SVN Server v1.5.2 (вам нужно установить SVN-сервер, поскольку для части 2 требуется svnlook.exe
, который находится в пакете сервера. Фактически вы не настроите его на работу как SVN Server) Возможно даже можно просто скопировать svnlook.exe
с другого компьютера и поместить его где-то в свой путь.
Часть 1 - TortoiseSVN
Создание свойств TortoiseSVN - это все, что требуется для получения ссылок в журнале SVN.
Предыдущие инструкции работают нормально, я приведу их здесь для удобства:
Настроить свойства
Щелкните правой кнопкой мыши на корневой каталог проекта, из которого вы хотите работать.
Выберите "TortoiseSVN → Свойства"
Добавьте пять пар значений свойства, нажав "Создать..." и введя следующие в "Имени свойства" и "Значение свойства" соответственно: (убедитесь, что вы отметили "Применить свойство рекурсивно" для каждого)
bugtraq:label BugzID: bugtraq:message BugzID: %BUGID% bugtraq:number true bugtraq:url http://[your fogbugz URL here]/default.asp?%BUGID% bugtraq:warnifnoissue false
Нажмите "ОК"
Как говорит Джефф, вам нужно сделать это для каждой рабочей копии, поэтому следуйте его инструкциям по переносу свойств.
Что это. TortoiseSVN теперь добавит ссылку на соответствующий FugBugz bugID при фиксации. Если это все, что вы хотите, вы можете остановиться здесь.
Часть 2 - FogBugz
Для этого нам нужно настроить скрипты hook. В основном командный файл вызывается после каждого фиксации, а это, в свою очередь, вызывает VBS script, который выполняет отправку в FogBugz. VBS script на самом деле отлично работает в этой ситуации, поэтому нам не нужно его изменять.
Проблема заключается в том, что командный файл записывается для работы в качестве крюка сервера, но нам нужен кликер.
Сервер SVN вызывает крюк post-commit с этими параметрами:
<repository-path> <revision>
TortoiseSVN вызывает крюк post-commit с этими параметрами:
<affected-files> <depth> <messagefile> <revision> <error> <working-copy-path>
Итак, почему это не работает - параметры неверны. Нам нужно изменить пакетный файл, чтобы он передавал правильные параметры VBS script.
Вы заметите, что TSVN не передает путь репозитория, что является проблемой, но оно работает в следующих случаях:
- Имя репозитория и имя рабочей копии одинаковы
- Вы выполняете фиксацию в корневой папке рабочей копии, а не вложенной папке.
Я посмотрю, смогу ли я исправить эту проблему и опубликую здесь, если я это сделаю.
Здесь мой измененный командный файл, который работает (пожалуйста, извините чрезмерные комментарии...)
Вам нужно будет установить каталоги хука и репозитория в соответствии с вашими настройками.
rem @echo off
rem SubVersion -> FogBugz post-commit hook file
rem Put this into the Hooks directory in your subversion repository
rem along with the logBugDataSVN.vbs file
rem TSVN calls this with args <PATH> <DEPTH> <MESSAGEFILE> <REVISION> <ERROR> <CWD>
rem The ones we're interested in are <REVISION> and <CWD> which are %4 and %6
rem YOU NEED TO EDIT THE LINE WHICH SETS RepoRoot TO POINT AT THE DIRECTORY
rem THAT CONTAINS YOUR REPOSITORIES AND ALSO YOU MUST SET THE HOOKS DIRECTORY
setlocal
rem debugging
rem echo %1 %2 %3 %4 %5 %6 > c:\temp\test.txt
rem Set Hooks directory location (no trailing slash)
set HooksDir=\\myserver\svn\hooks
rem Set Repo Root location (ie. the directory containing all the repos)
rem (no trailing slash)
set RepoRoot=\\myserver\svn
rem Build full repo location
set Repo=%RepoRoot%\%~n6
rem debugging
rem echo %Repo% >> c:\temp\test.txt
rem Grab the last two digits of the revision number
rem and append them to the log of svn changes
rem to avoid simultaneous commit scenarios causing overwrites
set ChangeFileSuffix=%~4
set LogSvnChangeFile=svn%ChangeFileSuffix:~-2,2%.txt
set LogBugDataScript=logBugDataSVN.vbs
set ScriptCommand=cscript
rem Could remove the need for svnlook on the client since TSVN
rem provides as parameters the info we need to call the script.
rem However, it in a slightly different format than the script is expecting
rem for parsing, therefore we would have to amend the script too, so I won't bother.
rem @echo on
svnlook changed -r %4 %Repo% > %temp%\%LogSvnChangeFile%
svnlook log -r %4 %Repo% | %ScriptCommand% %HooksDir%\%LogBugDataScript% %4 %temp%\%LogSvnChangeFile% %~n6
del %temp%\%LogSvnChangeFile%
endlocal
Я собираюсь предположить, что хранилища находятся в \\myserver\svn\
, а рабочие копии - в разделе `C:\Projects\
-
Войдите в свою учетную запись FogBugz и нажмите "Дополнительно" → "Настройка интеграции управления версиями"
-
Загрузите файл VBScript для Subversion (не докучайте командный файл)
-
Создайте папку для хранения скриптов hook. Я поместил его в ту же папку, что и мои репозитории. например.
\\myserver\svn\hooks\
-
Переименуйте VBscript, чтобы удалить
.safe
в конце имени файла. -
Сохраните мою версию командного файла в каталоге ваших крючков, как
post-commit-tsvn.bat
-
Щелкните правой кнопкой мыши по любому каталогу.
-
Выберите "TortoiseSVN > Настройки" (в меню правой кнопки мыши с последнего шага)
-
Выберите "Hook Scripts"
-
Нажмите "Добавить" и установите свойства следующим образом:
-
Тип крюка: крюк после фиксации
-
Рабочий путь копирования:
C:\Projects
(или любой другой корневой каталог для всех ваших проектов.) -
Командная строка Чтобы Execute:
\\myserver\svn\hooks\post-commit-tsvn.bat
(это необходимо, чтобы указать, где вы положили ваш каталог крючки на шаге 3) -
Отметьте "Подождите, пока закончится script"
-
-
Дважды нажмите OK.
В следующий раз, когда вы зафиксируете и введите Bugid, он будет отправлен в FogBugz. Ссылки не будут работать, но, по крайней мере, информация о ревизии есть, и вы можете вручную найти журнал в TortoiseSVN.
ПРИМЕЧАНИЕ. Вы заметите, что корень репозитория жестко закодирован в пакетный файл. В результате, если вы проверяете из хранилищ, которые не имеют один и тот же корень (например, один на локальном диске и один на сети), то вам необходимо использовать 2 пакетных файлов и 2 соответствующие записи под Hook Scripts в TSVN настройки. Способ сделать это будет иметь два отдельных дерева рабочей копии - по одному для каждого корня репозитория.
Часть 3 - WebSVN
Errr, я этого не делал: -)
От чтения документации WebSVN, кажется, что WebSVN фактически не интегрируется с сервером SVN, он просто ведет себя как любой другой клиент SVN, но представляет собой веб-интерфейс. Теоретически он должен хорошо работать с файловым репозиторием. Я не пробовал, хотя.