如何用Python调用Azure DevOps API获取PR中所有已修改文件
如何使用Python调用Azure DevOps API获取拉取请求中的所有已修改文件
方案一:直接调用REST API(无需额外SDK)
这种方式不依赖Azure DevOps官方Python SDK,通过HTTP请求直接调用REST接口,灵活性更高。
步骤说明
- 生成个人访问令牌(PAT):在Azure DevOps账户中创建PAT,需勾选
Code (Read)权限,确保能读取PR文件信息。 - 构造请求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)
- 发送认证请求:使用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的场景。
步骤说明
- 安装SDK:执行
pip install azure-devops - 初始化客户端:使用PAT创建连接,获取Git客户端实例
- 调用方法获取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
相关产品推荐
相关产品推荐

