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

如何用Python调用Azure DevOps API获取PR中所有已修改文件

如何使用Python调用Azure DevOps API获取拉取请求中的所有已修改文件

方案一:直接调用REST API(无需额外SDK)

这种方式不依赖Azure DevOps官方Python SDK,通过HTTP请求直接调用REST接口,灵活性更高。

步骤说明

  1. 生成个人访问令牌(PAT):在Azure DevOps账户中创建PAT,需勾选Code (Read)权限,确保能读取PR文件信息。
  2. 构造请求URL:
    格式:https://dev.azure.com/{组织名称}/{项目名称}/_apis/git/repositories/{仓库ID}/pullrequests/{PR编号}/files?api-version=7.1-preview.1
    其中:
    • 组织名称:你的Azure DevOps组织名
    • 项目名称:目标项目名
    • 仓库ID:可在仓库详情页的URL中获取,或通过API查询
    • PR编号:目标拉取请求的编号(比如PR-123)
  3. 发送认证请求:使用Base64编码的PAT进行Basic Auth认证。

代码示例

import requests
import base64

# 配置信息
ORGANIZATION = "你的组织名"
PROJECT = "你的项目名"
REPO_ID = "你的仓库ID"
PR_NUMBER = 123  # 替换为目标PR编号
PAT = "你的个人访问令牌"

# 构造认证头
auth_str = f"PAT:{PAT}"
auth_bytes = auth_str.encode("utf-8")
auth_base64 = base64.b64encode(auth_bytes).decode("utf-8")
headers = {
    "Authorization": f"Basic {auth_base64}",
    "Content-Type": "application/json"
}

# 构造API URL
url = f"https://dev.azure.com/{ORGANIZATION}/{PROJECT}/_apis/git/repositories/{REPO_ID}/pullrequests/{PR_NUMBER}/files?api-version=7.1-preview.1"

# 发送请求并处理响应
response = requests.get(url, headers=headers)
response.raise_for_status()  # 抛出请求错误

modified_files = response.json()["value"]
for file in modified_files:
    print(f"文件路径: {file['path']}, 修改类型: {file['changeType']}")

方案二:使用Azure DevOps Python SDK

官方提供的azure-devops包虽文档不够友好,但封装了API调用逻辑,适合习惯用SDK的场景。

步骤说明

  1. 安装SDK:执行pip install azure-devops
  2. 初始化客户端:使用PAT创建连接,获取Git客户端实例
  3. 调用方法获取PR文件:通过get_pull_request_files方法直接获取修改文件列表

代码示例

from azure.devops.connection import Connection
from msrest.authentication import BasicAuthentication

# 配置信息
ORGANIZATION_URL = "https://dev.azure.com/你的组织名"
PAT = "你的个人访问令牌"
PROJECT = "你的项目名"
REPO_ID = "你的仓库ID"
PR_NUMBER = 123  # 替换为目标PR编号

# 创建认证和连接
credentials = BasicAuthentication("", PAT)
connection = Connection(base_url=ORGANIZATION_URL, creds=credentials)

# 获取Git客户端
git_client = connection.clients.get_git_client()

# 获取PR修改文件
modified_files = git_client.get_pull_request_files(
    repository_id=REPO_ID,
    pull_request_id=PR_NUMBER,
    project=PROJECT
)

# 遍历输出文件信息
for file in modified_files:
    print(f"文件路径: {file.path}, 修改类型: {file.change_type}")

注意事项

  • 两种方案都需要确保PAT的权限足够,若出现403错误,检查PAT的权限范围
  • API版本可根据需求调整,官方推荐使用最新的预览版或正式版
  • 仓库ID也可以用仓库名称替代,但使用ID更稳定(名称可能修改)

内容的提问来源于stack exchange,提问作者anjalib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:43:17