我一直在调查这个问题并设法让它发挥作用。有一些小问题,但可以解决。
这个问题有 3 个不同的部分,如下所示:
TortoiseSVN 部分- 让 TortoiseSVN 在 svn 日志中插入 Bugid 和超链接
FogBugz 部分- 让 FogBugz 插入 SVN 信息和相应的链接
WebSVN 部分- 确保 FogBugz 的链接确实有效
第 1 部分的说明在另一个答案中,尽管它实际上超出了要求。关于钩子的内容实际上是第 2 部分的内容,正如所指出的 - 它不能“开箱即用”
只是为了确认,我们正在考虑使用 TortoiseSVNWITHOUTSVN 服务器(即基于文件的存储库)
我使用 UNC 路径访问存储库,但它也适用于本地驱动器或映射驱动器。
所有这些都适用于 TortoiseSVN v1.5.3 和 SVN Server v1.5.2(您需要安装 SVN Server,因为第 2 部分需要svnlook.exe
这是在服务器包中。您实际上并没有将其配置为作为 SVN 服务器工作)甚至可以只复制svnlook.exe
从另一台计算机并将其放在您的路径中的某个位置。
第 1 部分 - TortoiseSVN
为了获取 SVN 日志中的链接,只需创建 TortoiseSVN 属性即可。
以前的说明工作正常,为了方便起见,我将在此处引用它们:
配置属性
右键单击要使用的签出项目的根目录。
选择“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 将添加指向相应 FogBugz bugID 的链接。如果这就是你想要的,你可以停在这里。
第 2 部分 - FogBugz
为此,我们需要设置挂钩脚本。基本上,批处理文件在每次提交后都会被调用,这又会调用 VBS 脚本来提交到 FogBugz。 VBS 脚本实际上在这种情况下工作得很好,因此我们不需要修改它。
问题是批处理文件被编写为作为server钩子,但我们需要一个client hook.
SVN 服务器使用以下参数调用提交后挂钩:
<repository-path> <revision>
TortoiseSVN 使用以下参数调用提交后挂钩:
<affected-files> <depth> <messagefile> <revision> <error> <working-copy-path>
这就是它不起作用的原因 - 参数错误。我们需要修改批处理文件,以便将正确的参数传递给 VBS 脚本。
您会注意到 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's 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 帐户并单击“附加”->“配置源代码管理集成”
下载 Subversion 的 VBScript 文件(不用担心批处理文件)
创建一个文件夹来存储挂钩脚本。我将它放在与我的存储库相同的文件夹中。例如。\\myserver\svn\hooks\
重命名 VBscript 以删除.safe
在文件名的末尾。
将我的批处理文件版本保存在您的 hooks 目录中,如下所示post-commit-tsvn.bat
右键单击任意目录。
选择“TortoiseSVN > 设置”(在上一步的右键菜单中)
选择“挂钩脚本”
-
单击“添加”并设置属性如下:
单击“确定”两次。
下次您提交并输入 Bugid 时,它将提交给 FogBugz。这些链接不起作用,但至少有修订信息,您可以在 TortoiseSVN 中手动查找日志。
注意:您会注意到存储库根被硬编码到批处理文件中。因此,如果您从不具有相同根目录的存储库中签出(例如,一个在本地驱动器上,一个在网络上),那么您将需要使用 2 个批处理文件和 TSVN 中的 Hook 脚本下的 2 个相应条目设置。实现这一点的方法是拥有 2 个独立的工作副本树 - 每个存储库根目录都有一个工作副本树。
第 3 部分 - WebSVN
呃,我还没有这样做:-)
从阅读 WebSVN 文档来看,WebSVN 实际上并未与 SVN 服务器集成,它的行为就像任何其他 SVN 客户端一样,但提供了一个 Web 界面。理论上来说,它应该可以与基于文件的存储库一起正常工作。不过我还没试过。