使用Visual Studio 2008工具
我正在尝试获取更改集14318和14317的ASCII差异。
我可以使用GUI:
tf changeset 14318
然后选择一个文件并右键单击并选择与先前版本进行比较。但是,这有点单调乏味,它基于GUI。我的任务是将许多更改反向移植到不同的分支中。我想自动化测试(比如使用Python),确保我做得正确。好吧,出于教育目的,我将手工完成所有更改而不查看解决方案,然后我将比较这两个更改并尝试寻找任何差异。这就是我喜欢的东西 - 我可以输入:
tf changeset 14318 > out.txt&¬epad 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不存在。
现在谢谢你。
编辑: 是否有任何工具可以做到这一点?
答案 0 :(得分:20)
调用它时,您只是没有使用正确的语法。在这种情况下,它尝试在(不存在的)文件14318
和14317
的工作副本和基本存储库版本之间进行区分。
您需要做的是在/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
}