代码之家  ›  专栏  ›  技术社区  ›  Hamish Grubijan

解释tf diff

  •  7
  • Hamish Grubijan  · 技术社区  · 15 年前

    使用Visual Studio 2008工具,

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

    我可以使用GUI:

    tf changeset 14318
    

    然后选择一个文件,右键单击并选择“与以前的版本比较”。但是,这有点乏味,而且是基于GUI的。我手头的任务是将许多更改移植到另一个分支。我想自动化测试(比如使用python),确保我做的正确。好吧,为了教育目的,我将手工进行所有更改,而不看解决方案,然后我将比较这两个更改,并尝试寻找任何差异。以下是我喜欢的关于tf-我可以输入:

    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 回复  |  直到 10 年前
        1
  •  19
  •   Pavel Minaev    15 年前

    你只是在调用它时没有使用正确的语法。在这种情况下,它试图在工作副本和(不存在的)文件的基本存储库版本之间进行比较。 14318 14317 .

    您需要做的是在 /version ,像这样:

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

    请注意,您可以使用 ~ 其他版本规范-标签、日期等。参见 here 详情。

        2
  •  1
  •   Russell    15 年前

    下面是一个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
    }