首页 > 解决方案 > 如何使用 Azure DevOps 服务 API 跨分支创建 PR?

问题描述

我在 Azure DevOps 上有两个存储库,我们称它们parent_repochild_repo. 这child_repo是父级的叉子。我想做的是通过其 Python library 创建一个 PR 以使用Azure DevOps Services API进行合并masterchild_repomasterparent_repo

根据这些文档这个线程forkSource是指示源分支位于分支中并提供该分支所需的参数repo_id

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

_connection = Connection(base_url=URL, creds=BasicAuthentication("", PAT))
CLIENT = _connection.clients.get_git_client()

args = {
    "git_pull_request_to_create": {
        "sourceRefName": f"refs/heads/master",
        "targetRefName": f"refs/heads/master",
        "forkSource": {"repository": {"repository": child_repo_id}},
        "title": "...",
        "description": "...",
    },
    "repository_id": parent_repo_id,
}

res = CLIENT.create_pull_request(**args)

我提供的嵌套字典forkSource是库的反复试验的结果,它确实成功地创建了一个 PR。但是,这创建的 PR 是要合并parent:masterparent:master,所以它没有用。

我该如何更改,以便为toargs创建 PR ?child:masterparent:master

标签: pythonazure-devops-rest-api

解决方案


好的,我对文档进行了更深入的研究,forkSource. 按照这个链接到这里然后在这里很明显forkSource必须像这样制定:

"forkSource": {"repository": {"id": child_repo_id}}

奇怪的是,DevOps API 忽略了嵌套repository参数,而不是(最好)抛出错误。此更改解决了该问题并创建了一个类似于我所追求的 PR。

完整代码:

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

_connection = Connection(base_url=URL, creds=BasicAuthentication("", PAT))
CLIENT = _connection.clients.get_git_client()

args = {
    "git_pull_request_to_create": {
        "sourceRefName": f"refs/heads/master",
        "targetRefName": f"refs/heads/master",
        "forkSource": {"repository": {"id": child_repo_id}}, # the only change required
        "title": "...",
        "description": "...",
    },
    "repository_id": parent_repo_id,
}

res = CLIENT.create_pull_request(**args)

推荐阅读