TFS:查找受变更集影响的文件

时间:2017-03-09 18:02:50

标签: sql-server visual-studio-2015 tfs tfs2012

我们正在使用Team Foundation Server 2012。

我们有一个人在2016年8月9日的Changeset 13646中提交了97个文件(不包括设计人员和资源文件)。

2016年8月18日十(10)天后,他在Changeset 13716中推出了这些更改。

在此期间,其他工作项目已提交并完成。

有没有办法查询TFS以查找13646和13716之间的任何变更集中包含的文件名 WorkItems

我希望这是一个可以在SQL Server Management Studio中运行的SQL查询。

4 个答案:

答案 0 :(得分:7)

虽然这是针对TFS 2013的,但我希望它在2012年有效。这是针对tfs_warehouse数据库运行的

 SELECT DISTINCT df.[FileName]
    ,df.FilePath
    ,dcs.ChangesetID AS 'ChangeSetID'
    ,dwi.System_id AS 'WorkItemID'
    ,dwi.System_WorkItemType
    ,dwi.System_State
    ,dwi.System_CreatedDate
    ,dwi.System_ChangedDate

FROM DimFile df 
JOIN FactCodeChurn fcc ON df.FileSK = fcc.FilenameSK
JOIN FactWorkItemChangeset fwi ON fcc.ChangesetSK = fwi.ChangesetSK
JOIN DimWorkItem dwi ON fwi.WorkItemID = dwi.System_id
AND fwi.TeamProjectCollectionSK = dwi.TeamProjectCollectionSK
AND fwi.RemovedDateTime = CONVERT(DATETIME, N'9999', 126)
JOIN DimChangeset dcs ON dcs.ChangesetSK = fcc.ChangesetSK 

WHERE dcs.ChangesetID BETWEEN 13646 AND 13716

ORDER BY dcs.ChangesetID

文件路径中也有文件名,但我想我会将文件名作为单独的字段包含

答案 1 :(得分:5)

还有一种方法可以使用Relational数据仓库对SQL查询执行此操作。您需要访问tfs_warehouse数据库。您必须加入一些维度表才能获得所需内容:

您可以使用dbo.WorkItemChangeset作为变更集和工作项之间的链接,使用dbo.CodeChurn作为变更集和文件之间的链接。

关于此的文档陈旧且不完整,但这里有一些链接可以解释事实和维度表:

请注意,它们只是一个Tfs_Warehouse数据库,因此所有项目集合中所有项目的信息都存储在此处。因此,您无法信任变更集或工作项ID是唯一的。这些值在单个项目集合中是唯一的,因此在Tfs_Warehouse项目集合和变更集或工作项ID的组合是唯一的。

很遗憾,我目前无法访问Tfs_Warehouse数据库,因此我无法向您提供确切的查询。但是this question有一个类似的查询,你可以修改。

答案 2 :(得分:4)

使用 / format:详细参数的

tf history命令无法显示相关的工作项,这些工作项不符合您的要求。

不建议直接查询数据库。相反,您可以使用tf changeset命令显示完整信息,其中包括已更改的项目和相关工作项:

tf changeset changesetnumber /noprompt /collection:TeamProjectCollectionUrl

在您的情况下,您需要运行两个命令,如:

tf changeset 13646 /noprompt /collection:TeamProjectCollectionUrl
tf changeset 13716 /noprompt /collection:TeamProjectCollectionUrl

在以下屏幕截图中查看我的示例:

enter image description here

答案 3 :(得分:3)

下面的命令将返回修改的文件列表以及签入注释,我认为您应该也会看到工作项(但我没有测试过该部分)到日志文件中。请在以下命令中更新集合URL,分支名称。

tf history /collection:"tfsserverurl/collection" $/TFSbranchName /noprompt /recursive /format:detailed /v:C13646~C13716 > changeset.log

示例:

  

变更集:13646用户:姓氏,名字日期:星期四,二月   16,2017 4:26:50 PM

     

评论:从12月分行代码中添加了错过的值/代码   合并

     

项目:编辑$ / TFSBranchName / abc.cs

     

签入注释:代码审核者:绩效审核员:安全性   审阅者:

如果您复制所有"项目"从日志文件(changeset.log)中,您应该获得在这些changsesets中修改的所有文件。