3

我曾经使用不同的源代码控制工具,它允许我获得“差异报告”:版本 X 和版本 Y 之间对文件所做的所有更改(包括每个版本之间添加/删除的行,可能是多个版本)在一个文本文件中。这对于您非常确定某些代码曾经在您的文件中但现在不是的情况非常方便(当您的 BA 说要添加一些东西并且您在想“我没有把它拿出来吗?!”时非常方便) )。

这样做的好处是您可以获得一个文本文件,其中包含对代码库的所有更改,然后您可以搜索该文件。这相当于对每个版本(10 到 9、9 到 8 等)进行比较,然后将每次比较的结果保存到文本文件中。

我在 TFS 中没有看到任何简单的方法来做到这一点。有没有这样做的插件/电动工具?谷歌什么也没给我。

4

2 回答 2

4

我不知道任何开箱即用的解决方案。但是,如果您有 TFS Power Toys 和 PowerShell,自己制作一个并不难。在 PowerShell 中试试这个:

Add-PSSnapin Microsoft.TeamFoundation.PowerShell

Get-TfsItemHistory foo.cs | foreach {
  tf diff "foo.cs;C$($_.ChangesetId)" `
          "foo.cs;C$($_.ChangesetId - 1)" `
          /format:unified
} 
于 2009-08-27T19:11:09.540 回答
3

帕维尔让我朝着正确的方向前进,但我最终得到的剧本要复杂得多。而且可能仍然不正确。我必须考虑文件名的变化。

$snapin = get-pssnapin  | select-string "Microsoft.TeamFoundation.PowerShell"

if ($snapin -eq $null) { 
Write-Host "loading snap in..."     
     Add-PSSnapin Microsoft.TeamFoundation.PowerShell 
  }

$fileName = $args[0]  Write-Host "// File name " $fileName 
$results = @(Get-TfsItemHistory $fileName )  | select changesetid, @{name="Path"; expression={$_.changes[0].item.serveritem}}

$i = 0

$cmdArray = @() 

do {   
   if ( $results[$i+1] -ne "" ) {   
   $cmdArray +=  "tf diff ""{0};{1}"" ""{2};{3}""  /format:unified" -f $results[$i].Path, $results[$i].ChangeSetId, $results[$i+1].Path, $results[$i+1].ChangeSetId     
   } ; 
    $i++ 
} until ($i -ge ($results.length - 1))

foreach ($cmd in $cmdArray) {   
   #Write-Host "// " $cmd   
   iex $cmd  }
于 2009-08-28T21:17:35.413 回答