16

我已经安装了 TotroiseSVN,并且我的大部分存储库都从 C:\subversion\签入和签出,还有几个从网络共享签入和签出(我最初发布这个问题时忘记了这一点)

这意味着我本身没有“颠覆”服务器。

如何集成 TortoiseSVN 和 Fogbugz?

编辑:插入斜体

4

5 回答 5

18

我一直在调查这个问题并设法让它工作。有几个小问题,但可以解决。

这个问题有 3 个不同的部分,如下所示:

  1. TortoiseSVN 部分- 让 TortoiseSVN 在 svn 日志中插入 Bugid 和超链接

  2. FogBugz 部分- 让 FogBugz 插入 SVN 信息和相应的链接

  3. 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 日志中的链接所必需的。

以前的说明工作正常,为方便起见,我将在此处引用它们:

配置属性

  1. 右键单击要使用的已签出项目的根目录。

  2. 选择“TortoiseSVN -> 属性”

  3. 通过单击“新建...”并分别在“属性名称”和“属性值”中插入以下内容来添加五个属性值对:(确保为每个属性勾选“递归应用属性”)

    bugtraq:label    BugzID:
    bugtraq:message  BugzID: %BUGID%
    bugtraq:number   true
    bugtraq:url      http://[your fogbugz URL here]/default.asp?%BUGID%
    bugtraq:warnifnoissue   false
    
  4. 点击“确定”

正如 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 没有通过存储库路径,这是一个问题,但它在以下情况下确实有效:

  • 存储库名称和工作副本名称相同
  • 您在工作副本的根目录下进行提交,而不是在子文件夹中。

我将看看是否可以解决此问题,如果可以,我会在此处发帖。

这是我修改后的批处理文件,它确实有效(请原谅过多的评论......)

您需要设置挂钩和存储库目录以匹配您的设置。

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\

  1. 进入你的 FogBugz 账户并点击 Extras -> Configure Source Control Integration

  2. 下载 Subversion 的 VBScript 文件(不要打扰批处理文件)

  3. 创建一个文件夹来存储挂钩脚本。我把它和我的存储库放在同一个文件夹中。例如。\\myserver\svn\hooks\

  4. 重命名 VBscript 以删除.safe文件名末尾的 。

  5. 将我的批处理文件版本保存在您的钩子目录中,为post-commit-tsvn.bat

  6. 右键单击任何目录。

  7. 选择“TortoiseSVN > 设置”(在上一步的右键菜单中)

  8. 选择“挂钩脚本”

  9. 点击“添加”,设置属性如下:

    • 钩子类型:提交后钩子

    • 工作副本路径:(C:\Projects或所有项目的根目录。)

    • 要执行的命令行:(\\myserver\svn\hooks\post-commit-tsvn.bat这需要指向您在步骤 3 中放置 hooks 目录的任何位置)

    • 勾选“等待脚本完成”

  10. 单击确定两次。

下次提交并输入一个 Bugid 时,它将被提交给 FogBugz。这些链接不起作用,但至少有修订信息,您可以在 TortoiseSVN 中手动查找日志。

注意:您会注意到存储库根目录已硬编码到批处理文件中。因此,如果您从没有相同根目录的存储库中签出(例如,一个在本地驱动器上,一个在网络上),那么您将需要在 TSVN 的 Hook Scripts 下使用 2 个批处理文件和 2 个相应条目设置。这样做的方法是拥有 2 个单独的工作副本树 - 每个存储库根目录一个。

第 3 部分 - WebSVN

Errr,我没有这样做:-)

从阅读 WebSVN 文档来看,WebSVN 似乎实际上并没有与 SVN 服务器集成,它只是表现得像任何其他 SVN 客户端,但提供了一个 Web 界面。从理论上讲,它应该可以与基于文件的存储库一起正常工作。我还没有尝试过。

于 2008-12-16T00:03:30.553 回答
11

这个答案不完整且有缺陷!它只适用于 TortoisSVN 到 Fogbugz,反之则不行。我仍然需要知道如何让它从 Fogbugz 向后工作(就像它设计的那样),以便我可以在查看错误时从 Fogbugz 中看到错误的修订号。


有用的网址

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-propertypage.html

http://tortoisesvn.net/issuetracker_integration


设置“钩子”

  1. 进入您的 fogbugz 帐户,然后单击 Extras > Configure Source Control Integration

  2. 下载“post-commit.bat”和 Subversion 的 VBScript 文件

  3. 在一个易于访问的常用位置创建一个“钩子”目录(最好在文件路径中没有空格)

  4. 将文件的副本放在钩子目录中

  5. 重命名不带“.safe”扩展名的文件

  6. 右键单击任何目录。

  7. 选择“TortoiseSVN > 设置”(在上一步的右键菜单中)

  8. 选择“挂钩脚本”

  1. 点击“添加”

  2. 因此设置属性:

    • 钩子类型:提交后钩子

    • 工作副本路径:C:\\Projects(或所有项目的根目录。如果有多个,则需要为每个项目执行此步骤。)

    • 要执行的命令行:C:\\subversion\\hooks\\post-commit.bat(这需要指向您在步骤 3 中放置 hooks 目录的任何位置)

    • 我还选中了等待脚本完成的复选框...

警告:不要忘记双反斜杠!“\\”

点击确定...

添加挂钩脚本

注意:屏幕截图不同,请按照文件路径的文本,而不是屏幕截图...

此时,您似乎可以单击“问题跟踪器集成”并选择 Fogbugz。不。它只是返回“没有可用的问题跟踪器提供程序”。

  1. 单击“确定”关闭整个设置对话窗口

配置属性

  1. 再次,右键单击要使用的已签出项目的根目录(您需要为每个项目执行此“配置属性”步骤 - 请参阅下面的“在项目之间迁移属性”)

  2. 选择“TortoiseSVN > 属性”(在上一步的右键菜单中)

  3. 通过单击“新建...”并分别在“属性名称”和“属性值”中插入以下内容来添加五个属性值对:

bugtraq:label BugzID:
bugtraq:message BugzID: %%BUGID%%

bugtraq:数字真

bugtraq:url http://[你的fogbugz 网址]/default.asp?%BUGID%

bugtraq:warnifnoissue 错误

属性窗口 添加新属性

  1. 点击“确定”

提交更改并查看日志

现在,当您提交时,您可以指定提交解决的一个错误。这种迫使你在修复每个错误后提交......

指定提交时解决的错误

查看日志时(右键项目根目录,TortoiseSVN > show log)可以看到每次检查对应的bug id(1),可以点击bug id号带到fogbugz自动查看该bug如果您正在查看实际的日志消息。相当漂亮!


在项目之间迁移属性

  1. 右键单击已经具有正确属性配置的项目

  2. 选择“TortoiseSVN > 属性”(从步骤 1 的右键菜单中)

  3. 突出显示所有所需的属性

  4. 点击“导出”

  5. 以属性命名文件,并放置在一个易于访问的目录中(我将我的与钩子文件放在一起)

保存属性对话框

  1. 右键单击需要设置属性的签出项目的根目录。

  2. 点击“导入”

  3. 选择您在上面第 4 步中导出的文件

  4. 点击打开

于 2008-08-06T16:12:49.533 回答
2

为什么不能简单地安装一个颠覆服务器?如果您下载免费的VisualSVN 服务器,您将获得一个用于源代码的 http 服务器,因此可以使用 FogBugz 脚本来集成两者。

我问的原因是因为到目前为止所有脚本和文档都假设您拥有服务器,客户端脚本对于 FogBugz 来说太新而无法为其提供模板,因此您几乎可以使用自己的设备。

于 2008-08-08T11:02:16.213 回答
1

问题是 FogBugz 会链接到网页,而 file:///etc 不是网页。要获得两种方式的集成,您需要一个用于您的 subversion 存储库的 Web 服务器。设置 Apache 或其他可以以正确方式托管这些东西的东西。

于 2008-08-13T13:08:28.757 回答
0

我不确定我是否跟随你。您在网络上或 C:\ 驱动器上是否有存储库?根据你的两个帖子,你两者都有,或者都没有,或者其中一个或者......

您无法让 VisualSVN 或 Apache 从网络共享安全地提供存储库。由于您最初说您的 C:\ 驱动器上有存储库,这就是您得到建议的原因。如果您有不同的设置,您需要告诉我们。

如果您在本地硬盘上有存储库,我会安装 VisualSVN,或将其集成到 Apache 中。VisualSVN 可以与 Apache 一起正常运行,所以如果你走这条路,你只需要安装它。您现有的存储库也可以复制到 VisualSVN 的存储库根目录中,然后您就可以启动并运行了。

我不确定为什么这里的那个大帖子被标记为不完整,因为它详细说明了设置挂钩脚本以通知 FogBugz 与案例相关的新修订的必要步骤,这应该是不完整的消息所说的不做. 那不工作吗?

于 2008-08-08T11:34:20.157 回答