解释tf差异

时间:2010-01-28 23:18:52

标签: visual-studio-2008 tfs diff tf-cli

使用Visual Studio 2008工具

我正在尝试获取更改集14318和14317的ASCII差异。

我可以使用GUI:

tf changeset 14318

然后选择一个文件并右键单击并选择与先前版本进行比较。但是,这有点单调乏味,它基于GUI。我的任务是将许多更改反向移植到不同的分支中。我想自动化测试(比如使用Python),确保我做得正确。好吧,出于教育目的,我将手工完成所有更改而不查看解决方案,然后我将比较这两个更改并尝试寻找任何差异。这就是我喜欢的东西 - 我可以输入:

tf changeset 14318 > out.txt&&notepad out.txt

查看受影响的文件的详细信息。

同样,我希望得到一个out.txt,其中保存了所有差异。我很确定我可以处理Python部分。我肯定想知道如何使用tf.exe工具来做这件事,但是如果你也碰巧知道其他技巧(一些很酷的第三方工具或PowerShell脚本,那么请让我知道)。

谢谢!

哦,顺便说一下,我查了一遍:http://msdn.microsoft.com/en-us/library/6fd7dc73(VS.80).aspx

我试过这个:

tf diff 14318 14317

我收到此错误:文件(或文件夹)c:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ 14318不存在。

现在谢谢你。

编辑: 是否有任何工具可以做到这一点?

2 个答案:

答案 0 :(得分:20)

调用它时,您只是没有使用正确的语法。在这种情况下,它尝试在(不存在的)文件1431814317的工作副本和基本存储库版本之间进行区分。

您需要做的是在/version中使用变更集范围,如下所示:

tf diff $/Foo /version:C14317~C14318 /recursive /format:unified > foo.diff

请注意,您可以将~与任何其他版本规范一起使用 - 标签,日期等。有关详细信息,请参阅here

答案 1 :(得分:1)

这是一个PowerShell(V2)脚本,从Pavel的答案扩展而来,这将是更高效的,因为我们找到已经改变的文件,然后得到tf来分别区分它们:

Write-Host "Checking if TFS snap-in has been added..." -ForegroundColor green

# Find all TFS snapins.
$snapins = Get-PSSnapin -Registered | Where-Object { $_.Name -like "*TeamFoundation*" } 

foreach($snapin in $snapins)
{ 
    # Add snapin if not already added.
    $exists = Get-PSSnapin | Where-Object { $_.Name -eq $snapin.Name } 
    if (!$exists)
    {
        Write-Host "Adding Snapin " $snapin.Name -ForegroundColor green 
        Add-PSSnapin $snapin.Name 
    }
    else
    {
        Write-Host "Snapin already added." -ForegroundColor green
    }
}



# Get TFS Server object reference.
$tfs_server = Get-TfsServer -Name $/<serverName>/<RepoDir>

# Get list of changed files 
$changes_from_changeset = Get-TfsChangeset -ChangesetNumber 829 | Select -Expand Changes | % { $_.Item.ServerItem }
#$changes_from_changeset

foreach($change in $changes_from_changeset)
{
    &"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe" diff $change /version:829~T /format:unified
}