将Fogbugz与TortoiseSVN集成,但没有URL/Subversion后端

16

我已安装TortoiseSVN,并且有大部分的代码库从C:\subversion\检入和检出,还有几个从网络共享检入和检出(当我最初发布此问题时,我忘记了这一点)

这意味着我没有一个“subversion”服务器。

我该如何集成TortoiseSVN和Fogbugz?

编辑:插入斜体


这个链接有用吗?http://www.fogcreek.com/FogBugz/docs/40/Articles/SourceControl/TortoiseSVN.html - Pat
如果你刚到这里 - Fogbugz现在与Mercurial集成 - 他们称之为Kiln。托管版本对于<3个用户是免费的。 - CAD bloke
5个回答

18
我一直在调查这个问题,现在已经解决了。虽然有一些小问题,但可以解决。
这个问题分为三个部分,如下:
1. TortoiseSVN部分 - 让TortoiseSVN插入Bugid和超链接到svn日志中 2. FogBugz部分 - 让FogBugz插入SVN信息和对应的链接 3. WebSVN部分 - 确保来自FogBugz的链接实际上可用
第一部分的说明在另一个答案中,尽管它实际上做得比需要的更多。关于钩子的东西实际上是为第二部分准备的,并且正如指出的那样 - 它不能“开箱即用”。 请确认,我们正在考虑使用没有SVN服务器的TortoiseSVN(即基于文件的存储库) 我使用UNC路径访问存储库,但也适用于本地驱动器或映射驱动器。
所有这些都适用于TortoiseSVN v1.5.3和SVN Server v1.5.2(您需要安装SVN Server,因为第二部分需要svnlook.exe,该文件包含在服务器软件包中。您实际上不需要将其配置为作为SVN服务器工作)。甚至可能只需从另一台计算机复制svnlook.exe并将其放在路径中的某个位置。
第1部分 - TortoiseSVN
创建TortoiseSVN属性就足以在SVN日志中获取链接。
之前的说明很好,我在这里引用它们以方便参考:

Configure the Properties

  1. Right click on the root directory of the checked out project you want to work with.

  2. Select "TortoiseSVN -> Properties"

  3. Add five property value pairs by clicking "New..." and inserting the following in "Property Name" and "Property Value" respectively: (make sure you tick "Apply property recursively" for each one)

    bugtraq:label    BugzID:
    bugtraq:message  BugzID: %BUGID%
    bugtraq:number   true
    bugtraq:url      http://[your fogbugz URL here]/default.asp?%BUGID%
    bugtraq:warnifnoissue   false
    
  4. Click "OK"

正如Jeff所说,你需要为每个工作副本都执行此操作,请按照他的指示迁移属性。

就这样。TortoiseSVN现在将在提交时添加相应的FogBugz bugID链接。如果这就是你想要的,你可以停止了。

第二部分 - 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. 将我的批处理文件版本保存在您的hooks目录中,名称为post-commit-tsvn.bat

  6. 右键单击任何目录。

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

  8. 选择“Hook Scripts”。

  9. 单击“添加”并设置属性如下:

    • 钩子类型:Post-Commit Hook

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

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

    • 选中“等待脚本完成”。

  10. 点击两次“确定”。

下次提交并输入Bugid时,它将被提交到FogBugz。链接可能无法正常工作,但至少修订信息已经存在,您可以手动查找TortoiseSVN日志。

注意:您会注意到代码库根目录是硬编码到批处理文件中的。因此,如果您从没有相同根目录的代码库中检出(例如,一个在本地驱动器上,另一个在网络上),则需要使用2个批处理文件和2个对应的TSVN设置中的条目。解决此问题的方法是为每个代码库根目录拥有2个单独的工作副本树。

第三部分 - WebSVN

额,我还没有做过这个 :-)。

从阅读WebSVN文档来看,WebSVN似乎并不实际与SVN服务器集成,它只像任何其他SVN客户端一样呈现Web界面。理论上,它应该可以与基于文件的代码库很好地配合使用。不过我没有尝试过。


11
这个答案不完整且有缺陷!它只适用于从TortoiseSVN到Fogbugz的情况,但反过来则不行。我仍然需要知道如何让它倒退从Fogbugz(就像它设计的那样)工作,以便我可以在查看漏洞时从Fogbugz中看到漏洞在哪个修订版本中得到了解决。


有用的URL

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

http://tortoisesvn.net/issuetracker_integration


设置“Hooks”

  1. 进入您的fogbugz帐户,单击Extras > 配置源代码控制集成

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

  3. 创建一个位于常用易于访问的位置(最好不要在文件路径中使用空格)的“hooks”目录

  4. 将文件的副本放置在hooks目录中

  5. 取消文件的“.safe”扩展名

  6. 在任何目录上单击右键。

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

  8. 选择“钩子脚本”

  1. 单击“添加”

  2. 设置属性如下:

    • 钩子类型:后提交Hook

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

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

    • 我还选择了“等待脚本完成...”的复选框

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

点击确定...

添加挂钩脚本

注意:截图是不同的,请按照文本中的文件路径进行操作,而不是截图...

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

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

配置属性

  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

属性窗口 添加新属性

  1. 点击“确定”

提交更改并查看日志

现在,在提交代码时,你可以指定该次提交所解决的一个 bug。这会强制你在修复每个 bug 后进行提交...

提交时指定bug id

当你查看日志(右键单击项目根目录,TortoiseSVN > 显示日志)时,你可以看到每次提交对应的 bug id(1),如果你正在查看实际的日志消息,你可以单击 bug id 号码自动转到 fogbugz 查看该 bug。非常方便!


在项目之间迁移属性

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

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

  3. 选中所有期望的属性

  4. 点击“导出”

  5. 以该属性命名文件,并放置在易于访问的目录中(我是将其放置在 hooks 文件夹中)

保存属性对话框

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

  2. 点击“导入”

  3. 选择步骤 4 中导出的文件

  4. 点击“打开”


2
为什么你不能简单地安装一个Subversion服务器呢?如果你下载免费的VisualSVN Server,你就会得到一个用于源代码的HTTP服务器,因此可以使用FogBugz脚本来集成两者。
我之所以问这个问题,是因为所有的脚本和文档都假定你已经有了服务器,而客户端脚本对于FogBugz来说太新了,没有模板可供使用,因此你基本上只能自己摸索。

1
问题在于FogBugz将链接到一个网页,而file:///etc不是一个网页。为了使两者集成,您需要为您的subversion存储库设置一个Web服务器。要么设置Apache,要么设置其他能够以正确方式托管这些内容的服务器。

0

我不确定我是否理解你的意思。你的存储库是在网络上还是在你的C:\驱动器上?根据你的两篇帖子,你既有,也没有,或者只有其中一个...

你不能让VisualSVN或Apache安全地从网络共享中提供存储库。由于你最初说你的存储库在C:\驱动器上,所以你得到了这方面的建议。如果你有不同的设置,你需要告诉我们。

如果你的存储库在本地硬盘上,我会安装VisualSVN,或将其集成到Apache中。VisualSVN可以很好地与Apache一起运行,因此如果你选择这条路,你只需要安装它。你现有的存储库也可以直接复制到VisualSVN的存储库根目录中,然后就可以运行了。

我不确定为什么这篇大文章被标记为不完整,因为它详细说明了设置钩子脚本以通知FogBugz有关与案例相关联的新修订所需的步骤,这应该是“不完整”消息所说的内容。这个功能不起作用吗?


我在C:\驱动器上有一堆存储库,还有几个在网络共享上。我的意思是,我有Tortoise,但我没有Subversion,我该如何让它工作? - cmcculloh
我的解决方案不完整,因为它只能单向工作。它的设计方式是,在提交更改时,您需要输入一个FogBugz案件号。然后,在查看Subversion日志时,该案件号将成为指向FogBugz的可点击链接。 - cmcculloh
当在fogbugz网站上查看一个fogbugz案例时,应该有一个列出解决该案例的子版本检入列表。目前我的解决方案将在subversion(tortoise)日志中创建链接,但不会显示在fogbugz页面上。 - cmcculloh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接