如何确定我当前在本地工作区中有哪些变更集?
当然,我可以选择一个文件并查看其历史记录。但是,如果该文件最近未更新,则其变更集可能比同一解决方案中最近更新的文件更旧。
我们可能犯的一个可能的错误是我们查看了解决方案文件的历史记录,但是解决方案文件很少更改,除非您正在添加新项目/进行解决方案级别的更改。
最后要弄清楚变更集,我需要记住最新的文件更改了什么并查看它们的历史记录。
有一个更好的方法吗?
您的答案在 Buck Hodges 的 MSDN 博客上:如何确定工作区中的最新变更集
从工作区的根(顶部),在 cmd 中执行:
tf history . /r /noprompt /stopafter:1 /version:W
直接使用的常见答案tf.exe history . /r
确实有效,但速度可能非常慢。在我们的例子中,它需要 10-15 秒。我现在使用两阶段检查,首先检查一些任意文件的修订(我正在使用根文件夹中的文件)。
使用 powershell:
$tfexepath = "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\tf.exe"
$localpath = "C:\some\tfs\directory"
$result = & $tfexepath history $localpath /noprompt /stopafter:1 /version:W
"$result" -match "\d+" | out-null
$id = $matches[0]
然后使用 /r 标志从根目录搜索,但将搜索限制为从上面找到的修订版开始:
$result2 = & $tfexepath history $localpath /r /noprompt /stopafter:1 /version:$id~W
"$result2" -match "\d+" | out-null
$id2 = $matches[0]
#result:
Write-Host $id2
对于我们的代码库,这将总时间从 10-15 秒减少到 1.4-1.5 秒。
据我了解,没有缺点或限制,但我想在一个小型存储库中它可能会更慢。- 我很高兴知道。
运行 Visual Studio CMD(在我的情况下,对于 VS2015 称为:“VS2015 的开发人员命令提示符”),然后进入您的项目文件夹并执行以下命令:
tf history . /r /noprompt /stopafter:1 /version:W
如果你想使用 PowerShell(另见;相当于@kroonwijk的回答):
启用 tfs snapin (一次,如果还没有的话)
add-pssnapin Microsoft.TeamFoundation.PowerShell
使用 tfs cmdlet 获取当前变更集 ID
Get-TfsItemHistory <PATH_TO_PROJECT> -Recurse -Stopafter 1 -Version W