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