【问题标题】:get a multi-version diff report from TFS?从 TFS 获取多版本差异报告?
【发布时间】:2010-11-23 11:58:03
【问题描述】:

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

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

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

【问题讨论】:

  • 您在寻找这样的东西吗? stackoverflow.com/questions/782145/… 如果你愿意,可以在 hotmail 给我发一封电子邮件 kaneraz,我会将我修改后的代码发送给你,以用于我们的标签差异。

标签: powershell tfs powershell-2.0


【解决方案1】:

我不知道有任何开箱即用的解决方案。但是,如果您有 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
} 

【讨论】:

  • 嗯,这是个好主意。但是:“Add-PSSnapin:版本 1 没有可用的 Windows PowerShell 管理单元。”所以显然我需要PS 2.0。这似乎不适用于我的系统。
  • 此错误消息仅表示您的系统上没有安装任何管理单元。您确定您拥有最新版本的 TFPT,并且您在安装过程中没有取消选中“PowerShell”选项吗?最新的安装程序在这里:microsoft.com/downloads/…
  • 另外,如果您运行的是 64 位 Windows,请记住 TFS PowerShell 管理单元只有 32 位,因此您需要运行 32 位 PowerShell 才能使用它(您应该PS 安装程序为 32 位 shell 创建的单独图标)。
  • 啊,做到了,我不得不修改 TFS Power Toys 的安装以使其与 PowerShell 挂钩。现在我遇到了另一个错误,如果我不能解决它,我会告诉你。
  • Closer:“术语 'tf' 未被识别为 cmdlet、函数、可运行程序或脚本文件。” -- 这发生在循环中,所以我在屏幕上看到了很多。
【解决方案2】:

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

$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  }

【讨论】:

    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2012-07-01
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多