在没有 URL/Subversion 后端的情况下将 Fogbugz 与 TortoiseSVN 集成

Posted

技术标签:

【中文标题】在没有 URL/Subversion 后端的情况下将 Fogbugz 与 TortoiseSVN 集成【英文标题】:Integrating Fogbugz with TortoiseSVN with no URL/Subversion backend 【发布时间】:2010-09-05 10:33:24 【问题描述】:

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

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

如何集成 TortoiseSVN 和 Fogbugz?

编辑:插入斜体

【问题讨论】:

这个网址有帮助吗? fogcreek.com/FogBugz/docs/40/Articles/SourceControl/…> 如果你刚到这里 - Fogbugz 现在与 Mercurial 集成 - 他们称之为 Kiln。托管版本对 【参考方案1】:

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

这个问题有 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 > 设置”(在上一步的右键菜单中)

    选择“挂钩脚本”

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

    挂钩类型:提交后挂钩

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

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

    勾选“等待脚本完成”

    点击确定两次。

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

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

第 3 部分 - WebSVN

Errr,我没有这样做 :-)

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

【讨论】:

【参考方案2】:

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


有用的网址

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

http://tortoisesvn.net/issuetracker_integration


设置“挂钩”

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

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

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

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

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

    右键单击任意目录。

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

    选择“挂钩脚本”

    点击“添加”

    这样设置属性:

    挂钩类型:提交后挂钩

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

    李>

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

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

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

点击确定...

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

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

    点击“确定”关闭整个 设置对话窗口

配置属性

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

    选择“TortoiseSVN > 属性”(在右键菜单中 从上一步开始)

    通过单击“新建...”并插入 在“属性名称”和 “属性值”分别:

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

bugtraq:number true

bugtraq:url http://[yourfogbugz URL 这里]/default.asp?%BUGID%

bugtraq:warnifnoissue 错误

    点击“确定”

提交更改并查看日志

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

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


在项目之间迁移属性

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

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

    突出显示所有需要的属性

    点击“导出”

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

    在需要设置属性的签出项目的根目录上右击。

    点击“导入”

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

    点击打开

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

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

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

【讨论】:

我的 C:\ 驱动器上有一堆存储库,网络共享上有几个。重点是,我有 Tortoise,我没有 Subversion,我怎样才能让它工作? 我的解决方案不完整,因为它只能以一种方式工作。它的设计工作方式是,当您提交更改时,您输入一个fogbugz 案例编号。然后,在查看颠覆日志时,案例编号将成为fogbugz的可点击链接。 在fogbugz 网站上查看fogbugz 案例时,应该有一个解决该案例的subversion checkins 列表。现在我的解决方案将在 subversion(tortoise) 日志中创建链接,但不会在fogbugz 页面上创建链接。

以上是关于在没有 URL/Subversion 后端的情况下将 Fogbugz 与 TortoiseSVN 集成的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 Firebase 和自定义后端的情况下使用 Flutter 设置推送通知

如何在没有邮件接收客户端的情况下验证 Mandrill 自定义发送域?

如何在不实现我自己的数据库后端的情况下保存站点的状态?

如何在不更改后端的情况下解决 Angular 8 中的 CORS 问题?

在没有 SVN 客户端的情况下应用 TortoiseSVN 补丁

在没有服务器端的情况下构建报价数据库