【问题标题】:Integrate crucible with tfs将坩埚与 tfs 集成
【发布时间】:2014-05-18 22:24:42
【问题描述】:

我使用 TFS 和 Jira 来管理我的团队任务。 我想在开发过程中集成一个代码审查工具。

当我尝试使用坩埚时,我发现它不支持 TFS。

我想知道是否有一个好的和可靠的解决方案,使我能够使用 TFS 的坩埚。

补充,如果对 VS 和 JIRA 的代码审查工具有其他建议。

谢谢!

【问题讨论】:

    标签: tfs jira jira-plugin


    【解决方案1】:

    前段时间,我们决定在我们的项目上运行 Crucible。我们的项目使用 TFS 2012。我们在 TFS 中使用一个名为“dev”的分支作为主干,即开发人员进行提交和原始代码所在的分支。发布代码所在的第二个分支称为“主” 我们的同行评审工作流程是:

    1. 进行一些更改并搁置代码
    2. 向审阅者发送电子邮件
    3. 审阅者在某些自定义工具中进行审阅并发送电子邮件通知他已完成
    4. 将代码提交到 TFS 上的“开发”分支中
    5. 等待 build-server 成功构建
    6. 提交到生产代码所在的“主”分支

    我们的目标是改进步骤 23。 Crucible 是很棒的工具,但它不支持开箱即用的 TFS,因此我们决定使用一些 TFS 桥接器。实际上,使用 tfs->svn 或 tfs->git 有两个主要选项。最后,我们决定使用 tfs->git bridge,因为在 git 中创建分支非常便宜而且它可能会有所帮助(确实如此),因为我们正在考虑在 git 中使用分支来在 TFS 中搁置。最后我们下定决心使用 git。 到目前为止,我只知道将 TFS 转换为 git 的 2 个选项:

    • git tf - 这个可以在 Linux 上运行并被微软推荐
    • git tfs - 这个只能在 Windows 下工作,但我们选择这个,因为命令集很大 我们需要将 TFS 分支转换为 Git 存储库,并保持我们的 git 存储库处于新鲜状态。我们不使用 git 将新更改推回 TFS,我们只需要 Crucible 的 git repo。

    我们采取了一些步骤来实现目标: 1. 首先,我们将 TFS “dev” 分支克隆到 “dev” 存储库中。我们只需要这个分支,并且我们没有来自“主”分支的任何反向合并。我们曾尝试使用 clone 命令执行此操作,但没有任何运气:

    git tfs clone http://tfs:8080/tfs/DefaultCollection $/SOME_PATH/dev
    

    此命令从 TFS 克隆完整历史记录,但似乎我们的 TFS 分支相当大,有时 git-tfsSystem.OutOfMemoryException 异常而崩溃。还有一次,我们失败了,但超出了最大路径限制,我们通过将工作空间目录映射到尽可能短的路径找到了解决方法,如下所示:

    git config --global git-tfs.workspace-dir e:\ws
    

    当我们使用 clone 命令失败时,我们使用 quick-clone 命令。这个克隆从历史上的任何时间开始,从任何变更集开始。

    git tfs quick-clone -c545532 http://tfs:8080/tfs/DefaultCollection $/SOME_PATH/dev
    

    选项 -c545532 这里是开始复制的变更集的数量。每年一次,我们用新的头文件更新我们所有的源文件,因此我们只是从今年年初开始复制。这样,我们应该有所有必要的历史来从搁置中创建分支。 如果您没有在此处使用 -c 参数,那么您根本就没有任何历史记录,因为 quick-clone 只会在您要求时复制历史记录。 克隆存储库后,我们编写了“脚本”并将其放入任务调度程序中,每 5 分钟运行一次。脚本所做的只是检查 TFS 中的新提交并在我们的 git 存储库上创建新分支。同样,我们在这里使用 git-tfs。为了获得所有新的提交,我们调用 pull 命令:

    git tfs pull 
    

    为了将 TFS 搁置到特定的 git 分支中,我们使用 unshelve 命令:

    git tfs unshelve -user=TFSDOMAIN\Username "Shelveset Name Here" Branch_Shelveset_Name_Here
    

    最后一个命令从 TFS 中的搁置集 'Shelveset Name Here' 在 git 中创建分支 'Branch_Shelveset_Name_Here'。搁置集的名称可以包含空格和一些转义字符,因此我们的“脚本”会清理这些情况。正如我所说,在 git 上创建分支非常便宜,因此我们对此没有任何问题。如果有东西被推入 git repo,我们调用坩埚 API 来刷新它。 顺便说一句:为了让 git repo 在网络中可见,我刚刚安装了 SCM-Server。 Crucible 已安装并配置为使用我们的域用户名/密码,因此我们也会收到电子邮件通知。因此,我们极大地改进了工作流程中的第 2 步和第 3 步,它运行了几个月,我们对此感到满意。

    我们的工作流程变成了:

    1. 进行一些更改并搁置代码
    2. 在坩埚中等待我们的搁置集(大约 6-8 分钟),创建评论
    3. 审稿人在坩埚中进行审稿
    4. 将代码提交到 TFS 上的“开发”分支中
    5. 等待 build-server 成功构建
    6. 提交到生产代码所在的“主”分支

    在处理这个问题时,我注意到了一些问题:

    Issue1:如果您将新文件添加到项目中并将其搁置,您将不会在 git repo 中看到它,因为 git-tfs 找不到它的父提交。我不确定它是否是这个工具的错误,但最简单的解决方法是在现有父级的搁置集中至少有一个文件。例如,您添加了 2 个新文件并希望将其发送以供审核。无需使用这些文件创建搁置集,只需触摸 git repo 中已有的任何文件(使其在 Visual Studio 中挂起),最后您将能够创建包含三个文件的搁置集(2 个新文件 [添加] 和 1 个用于编辑 [编辑] )。在这种情况下,一切正常,git-tfs 可以将 TFS 的搁置集取消搁置到 git 分支中。也就是说,我们可以在坩埚中看到它。

    Issue2:有一天,我们在 git repo 中的 HEAD 与“master”分支分离了。一旦发生这种情况,坩埚就没有看到新的变更集。我已经用命令修复了它:

    git rebase HEAD master
    

    我已经创建了这一切如何在我们的项目中运作的图片,可能会有所帮助:

    【讨论】:

    • 好帖子!问题。仅基于对 dev 分支的签入,如果没有搁置集,您将如何做到这一点?
    【解决方案2】:

    您可以将 Mira 和 TFS 与 TaskTop 集成,然后使用 Visual Studio 中内置的代码审查工具。

    我认为这些是你最好的选择。

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多