Python - azure.devops - 获取拉取请求的分支/提交记录

0 投票
1 回答
78 浏览
提问于 2025-04-14 15:48

我正在使用azure.devops的Python库一个一个地解析拉取请求(PR)。

对于每个PR,我需要获取相关的分支和提交记录。

有没有办法做到这一点呢?

repositories = git_client.get_repositories(project=None, include_links=None, include_all_urls=None, include_hidden=None)
for repo in repositories:
    if repo.remote_url == repo_url:
        pull_requests = git_client.get_pull_requests(repository_id=repo.id,search_criteria=GitPullRequestSearchCriteria(status='completed'))
        for pr in pull_requests:
            print(f'Pull Request #{pr.pull_request_id}: {pr.title}')

我查看了文档,但找不到相关的信息。

谢谢你的帮助!

1 个回答

0

你需要通过命令 pip install azure-devops 来安装 azure-devops 这个包。

然后可以用 Python 脚本来获取你需要的信息。下面是我的 Python 脚本:

from azure.devops.connection import Connection
from msrest.authentication import BasicAuthentication
from azure.devops.v7_0.git.git_client import GitClient
from azure.devops.v7_0.git.models import GitPullRequestSearchCriteria

# Replace with your Azure DevOps organization URL and PAT
organization_url = "https://dev.azure.com/{orgname}"
personal_access_token = "PAT"

# Create a connection
credentials = BasicAuthentication("", personal_access_token)
connection = Connection(base_url=organization_url, creds=credentials)

# Get the Git client
git_client = connection.clients.get_git_client()

# Replace with your repository URL
repo_url = "https://{orgname}@dev.azure.com/{orgname}/{projectname}/_git/{reponame}"

# Get all repositories
repositories = git_client.get_repositories(project=None, include_links=None, include_all_urls=None, include_hidden=None)
for repo in repositories:
   print(f"testreporemoteurl .......{repo.remote_url}")   # used to check the remote url.

for repo in repositories:
    if repo.remote_url == repo_url:
        pull_requests = git_client.get_pull_requests(repository_id=repo.id, search_criteria=GitPullRequestSearchCriteria(status='Completed'))
        for pr in pull_requests:
            print(f"Pull Request #{pr.pull_request_id}: {pr.title}")
            print(f"Source Branch: {pr.source_ref_name}")
            print(f"Target Branch: {pr.target_ref_name}")
            print(f" - {pr}")     # check the whole PR content
            print("Commits:")
            print(f" - {pr.last_merge_source_commit.commit_id}")   # get the last merget source commit id
            print("\n")

请把 orgnamepatprojectnamereponame 替换成你自己的信息。

输出的内容如下。我输出了 PR 的 ID、标题、源分支和目标分支。我还输出了整个 {pr} 的内容。对于提交(commits),没有任何内容。所以,我输出了最后一次合并的源提交 ID。你可以解析 {pr} 的内容来获取你需要的信息。

在这里输入图片描述

撰写回答