获取所有历史、变更集中文件的所有版本

Posted

技术标签:

【中文标题】获取所有历史、变更集中文件的所有版本【英文标题】:Get all versions of the file in all history, changesets 【发布时间】:2021-11-29 13:25:41 【问题描述】:

是否有一个tf command 可以从所有变更集中提取所有版本的config.json 文件?

我想看看它在开发过程中是如何改变的。

我使用 Team Foundation Server 2012 (v11)。

【问题讨论】:

您仍在使用 TFS 11 有什么原因吗?现在已经不支持了。您无法在 Visual Studio 中查看文件的历史记录吗? @spikey_richie 客户使用它。是的,我可以查看每个单独文件的历史记录并查看更改,效果非常好。我需要分析历史记录中多个文件的更改并识别更改,因此我需要为此配置文件导出所有可用的历史记录。手动提取文件的变更集太多。 【参考方案1】:

您需要编写脚本...使用 PowerShell 或类似的东西。

用途:

tf history /collection:https://server/collection $/project/path/file /format:brief /noprompt

获取文件的所有唯一变更集。提取表中每一行的数字。正则表达式是一种简单的方法...每行上的^\d+ 应该从每行的开头获取数字。

然后创建一个本地工作区来获取文件的副本,基本结构应该如下所示,但您需要编写循环和变量插入脚本:

md temp
cd temp
tf workspace /new /noprompt temporary-workspace /collection:https://server/collection
tv workfold /map $/project/path . /collection:https://server/collection

## foreach changesetnumber in history
tf get /version:cchangesetnumber /overwrite /force /noprompt $/project/path/config.json 

copy config.json ..\config.json.changesetnumber
## end forach

tf workspace /delete temporary-workspace

这应该为每个变更集创建一个编号的文件副本。

下面的powershell脚本对我有用,但还是有点粗糙:

$tf = "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\TF.exe"
$collectionUri = "https://dev.azure.com/jessehouwing"
$path = '$/agile2017'
$file = "xxxxxxx"

$history = & $tf history /collection:$collectionUri $path/$file /format:brief /noprompt
$changesets = $history | % Select-String -InputObject $_ -Pattern "^\d+" 
$changesets = $changesets.Matches | % $_.value 

cd $env:temp
md temporary-workspace -force
md history -Force
cd temporary-workspace
& $tf workspace /new /noprompt temporary-workspace /collection:$collectionUri
& $tf workfold /map $path . 

foreach ($changeset in $changesets)

    & $tf get /version:c$changeset /overwrite /force /noprompt $path/$file 
    copy "$file" "..\history\$file.$changeset" -Force


& $tf workspace /delete temporary-workspace
cd ..
rd temporary-workspace -Recurse

【讨论】:

我假设tf vc 用于较新的版本,因为我得到“无法识别的命令:vc。”。没有 'vc' 可以正常工作,只需 tf history... 是的,Visual Studio 2017 添加了“vc”和“git”限定符。如果您使用的是旧版本,请忽略“vc”添加。 您也可以使用较新版本的 VS 毫无问题地连接到 TFS,有时您会获得一些性能提升和一些以前需要 TFS Power Tools 的额外命令。 很高兴它有效!随时编辑/更新您必须进行任何调整的答案。 它有效,但我也希望历史中哪些文件是从共同祖先合并的,哪个是共同祖先更明显。所以我只是发布了更精确的问题。

以上是关于获取所有历史、变更集中文件的所有版本的主要内容,如果未能解决你的问题,请参考以下文章

sharepoint 获取所有网站集前40w个文件中启用历史版本文件的大小/数量/最后修改时间

三种版本控制系统

Git与SVN对比

open62541:同时获取订阅的所有变更监控项

python获取上一级与上上一级目录的写法

获取特定历史版本的 git 等效于 hg update 是啥? [复制]