tfs - 将坩埚与tfs集成

标签 tfs jira jira-plugin

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

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

我想知道是否有一个很好的且可靠的解决方案,以使我可以在TFS中使用坩埚。

另外,如果还有针对VS和JIRA的代码reiview工具的建议。

谢谢!

最佳答案

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


进行一些更改并搁置代码
发送邮件给审稿人
审阅者在某些自定义工具中进行审阅,并发送电子邮件通知其已完成
将代码提交到TFS上的'dev'分支
等待构建服务器成功构建
提交到生产代码所在的“主要”分支


我们的目标是改进第2步和第3步。Crucible是出色的工具,但是它并不支持TFS,因此我们决定使用一些TFS桥。实际上,使用tfs-> svn或tfs-> git有两个主要选项。最后,我们决定使用tfs-> git bridge,因为在git中创建分支非常便宜,并且这样做很有帮助(确实如此),因为我们正在考虑在git中使用git分支在TFS中使用架子。最后,我们决定使用git。
到目前为止,我只知道2种将TFS转换为git的选项:


git tf-此版本可在Linux上使用,并由Microsoft推荐
git tfs-此命令仅在Windows下有效,但由于命令集过多,我们选择了此命令
我们需要将TFS分支转换为Git存储库,并保持git存储库处于最新状态。我们不使用git将新的更改推回TFS,我们仅需要Crucible的git repo。




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

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


此命令从TFS克隆了完整的历史记录,但似乎我们的TFS分支很大,并且有时git-tfs崩溃并带有System.OutOfMemoryException异常。再次,我们失败了,但超出了最大路径限制,我们找到了解决方法,方法是将工作区目录映射到尽可能短的路径,如下所示:

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


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

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


选项-c545532此处是从其开始复制的变更集的数量。每年一次,我们使用新的标题更新所有源文件,因此我们仅从当年年初开始进行复制。这样,我们应该具有所有必要的历史记录,可以从货架集中创建分支。
如果您在这里没有使用-c参数,那么您将根本没有任何历史记录,因为如果您需要,快速克隆仅复制历史记录。
克隆存储库后,我们编写了“脚本”并将其放入任务调度程序中,每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中的架子集“此处的棚架名称”在git中创建分支“ Branch_Shelveset_Name_Here”。架子集的名称可以包含空格和一些转义字符,因此我们的“脚本”可以清除这种情况。正如我所说,在git上创建分支非常便宜,因此我们对此没有任何问题。如果将某些内容推送到git repo中,我们将调用坩埚API对其进行刷新。
顺便说一句:为了使git repo在网络中可见,我刚刚安装了SCM-Server。已安装坩埚并将其配置为使用我们的域用户名/密码,因此我们也会收到电子邮件通知。结果,我们从工作流程中极大地改进了步骤2和3,并且该方法工作了几个月,我们对此感到满意。

我们的工作流程变为:


进行一些更改并搁置代码
在坩埚中等待我们的货架(约6-8分钟),创建评论
审稿人在坩埚中进行审阅
将代码提交到TFS上的'dev'分支
等待构建服务器成功构建
提交到生产代码所在的“主要”分支




在处理此问题时,我注意到了几个问题:

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

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

git rebase HEAD master


我创建了图片,说明这一切如何在我们的项目中起作用,也许会有所帮助:

关于tfs - 将坩埚与tfs集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23727489/

相关文章:

maven - 无法启动插件 : Unable to resolve 167. 0 : missing requirement [167. 0] osgi.wiring.package; (osgi.wiring.package=com.atlassian.inject)

database - 访问数据库时,JIRA 自定义字段在生产环境中执行速度较慢

tfs - 如何在 VisualStudio.com 上创建团队项目集合?

java - 在 jira 工作流 validator 中获取当前用户

centos - Jira 服务器迁移恢复附件

jira - 如何使用问题ID在jira中查找问题类型

java - Atlas-run无法启动Jira,原因是“不受支持的major.minor 52.0版”

tfs - VS2012 可以与 TFS2010 一起使用吗?

c# - 使用 Visual Studio 生成错误 "MSB4006: There is a circular dependency in the target dependency graph involving target "生成“。”

vb.net - Visual Studio Online 无法在构建服务器上的类库中找到类中的函数