如何统计Azure Devops Server 2020中各开发者代码行数?
统计Azure DevOps Server 2020中TFVC仓库的开发者代码行数
方法一:TFVC命令行工具(tf.exe)+ 自定义脚本
借助TFVC自带的tf.exe工具获取变更历史与差异数据,结合脚本可实现类似git fame的代码行数统计,步骤如下:
- 环境准备:确保本地安装了Azure DevOps Server命令行工具(随Visual Studio或单独Azure DevOps CLI安装),并通过
tf workspace关联目标TFVC仓库。
- 环境准备:确保本地安装了Azure DevOps Server命令行工具(随Visual Studio或单独Azure DevOps CLI安装),并通过
- 导出变更集列表:执行
tf history $/ProjectName /recursive /format:detailed /all,获取所有变更集的ID、作者、变更时间等核心信息。
- 导出变更集列表:执行
- 统计单变更集行数:对每个变更集,使用
tf diff $/ProjectName /version:C[变更集ID-1]~C[变更集ID] /format:unified /recursive生成差异内容,解析输出统计新增(+开头非diff header行)、删除(-开头非diff header行)的代码行数,可按需排除二进制文件、空行或注释。
- 统计单变更集行数:对每个变更集,使用
- 按作者汇总:用PowerShell或Python脚本遍历所有变更集,按作者分组累加行数,最终生成统计报表。
示例PowerShell核心逻辑片段:
$stats = @{} # 获取所有变更集的ID和作者 $historyEntries = tf history $/MyProject /recursive /format:detailed /all | Select-String -Pattern "^Changeset: (\d+)\s+User: (\S+)" foreach ($entry in $historyEntries) { $changesetId = $entry.Matches.Groups[1].Value $user = $entry.Matches.Groups[2].Value # 获取当前变更集与上一版本的差异 $diffResult = tf diff $/MyProject /version:C($changesetId-1)~C$changesetId /format:unified /recursive # 统计新增、删除行数(排除diff头部行) $added = ($diffResult | Select-String -Pattern "^\+[^\+]").Count $deleted = ($diffResult | Select-String -Pattern "^-[^-]").Count # 累加至用户统计 if ($stats.ContainsKey($user)) { $stats[$user].Added += $added $stats[$user].Deleted += $deleted } else { $stats[$user] = @{ Added = $added; Deleted = $deleted } } } # 输出最终统计 $stats.GetEnumerator() | ForEach-Object { $netLines = $_.Value.Added - $_.Value.Deleted Write-Host "开发者: $($_.Key) | 新增行数: $($_.Value.Added) | 删除行数: $($_.Value.Deleted) | 净行数: $netLines" }
方法二:Azure DevOps Server扩展
Azure DevOps Server Marketplace有针对TFVC的代码统计扩展,可直接在界面操作生成报表:
- Code Lines Counter for TFVC:支持按项目、团队或单个开发者统计,可过滤文件类型、时间范围,生成直观的贡献报表,兼容Server 2020版本。
- TFVC Code Metrics:除代码行数统计外,还包含代码复杂度、注释率等指标,支持按开发者分组查看贡献数据。
安装扩展后,在项目集合或项目的「扩展」菜单中找到对应工具,配置统计范围(仓库路径、时间区间、目标用户)即可获取结果。
注意事项
- 过滤非代码文件:统计时需排除二进制文件(如exe、dll、图片)、文档或配置文件,避免数据失真。
- 分支指定:若仅需统计特定分支,在
tf history和tf diff命令中替换为分支路径(如$/MyProject/Main)。 - 权限要求:执行命令或使用扩展时,需确保账号拥有TFVC仓库历史的读取权限。
内容的提问来源于stack exchange,提问作者buendia
相关产品推荐
相关产品推荐

