You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure DevOps PR流水线中获取变更文件(无需关闭浅克隆)

在Azure DevOps PR流水线中无需关闭浅拉取获取变更文件

有几种无需关闭浅拉取的方案可以获取PR影响的文件,具体实现如下:

方案1:调用Azure DevOps REST API查询PR变更

直接利用PR触发流水线自带的系统变量,调用官方REST API获取PR的所有变更文件,完全不需要依赖git命令。

示例PowerShell脚本:

# 从系统变量中获取必要参数
$collectionUri = "$(System.TeamFoundationCollectionUri)"
$projectId = "$(System.TeamProjectId)"
$prId = "$(System.PullRequest.PullRequestId)"
$apiVersion = "7.1-preview.1"

# 设置请求头,使用流水线内置的OAuth令牌授权
$headers = @{
    "Authorization" = "Bearer $(System.AccessToken)"
    "Content-Type" = "application/json"
}

# 构建API请求地址
$url = "$collectionUri$projectId/_apis/git/pullrequests/$prId/changes?api-version=$apiVersion"

# 发起请求并解析结果
$response = Invoke-RestMethod -Uri $url -Headers $headers -Method Get

# 提取变更文件的类型和路径
$changedFiles = $response.changes | ForEach-Object {
    [PSCustomObject]@{
        变更类型 = $_.changeType
        文件路径 = $_.item.path
    }
}

# 输出整理后的结果
$changedFiles | Format-Table -AutoSize

注意:需要在流水线的代理作业设置中勾选「允许脚本访问OAuth令牌」,确保$(System.AccessToken)有权限读取PR信息。

方案2:临时拉取目标分支执行Git Diff

不修改全局浅拉取配置,仅在脚本中临时拉取目标分支(比如main)的最新提交,再执行diff命令对比:

示例PowerShell脚本:

# 临时拉取main分支的最新1次提交,不会改变流水线的全局浅拉取设置
git fetch origin main:refs/remotes/origin/main --depth 1

# 对比当前PR分支(HEAD)与main分支的差异,输出文件名和变更状态
$changedFiles = git diff --name-status HEAD origin/main

# 打印结果
Write-Host "PR变更文件列表:"
$changedFiles

这个方案保留了git命令的使用习惯,同时避免调整流水线的checkout步骤配置。

方案3:利用增量构建变量获取文件列表(限特定场景)

如果只需要简单的文件路径列表,且流水线开启了「增量构建」,可以直接使用预定义变量$(Build.ChangedFiles),它会返回逗号分隔的变更文件路径字符串,但不包含变更类型信息:

示例使用:

$changedFiles = "$(Build.ChangedFiles)".Split(',')
Write-Host "变更文件:`n$($changedFiles -join "`n")"

内容的提问来源于stack exchange,提问作者Daniel M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:27:18