我想使用 git 获取 Azure DevOps 中托管的存储库中的拉取请求列表。
Github 有支持。 我们可以将其添加到
.git/config
:
[remote "origin"]
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
但是当我为 Azure DevOps 尝试相同的方法时,它没有获取任何内容。我还尝试了
git-pr
包中的 git-extras
。
我猜测如果他们有支持,路径可能与
refs/remotes/origin/pr/
不同。他们有一个REST API端点来获取拉取请求,但我找不到任何关于使用git做同样的事情。
对于 Azure DevOps,配置略有不同。您可以将以下内容添加到
.git/config
:
[remote "origin"]
fetch = +refs/pull/*/merge:refs/remotes/origin/pull/*
也可以在没有事先配置的情况下将拉取请求临时提取到本地分支,如下所示:
git fetch origin refs/pull/$ID/merge:$LOCALBRANCH
获取和结帐示例(带配置):
$ git fetch origin -v
remote: Azure Repos
remote: Found 1 objects to send. (18 ms)
Unpacking objects: 100% (1/1), done.
From ssh.dev.azure.com:v3/aaaa/bbbb/cccc
= [up to date] main -> origin/main
= [up to date] test-branch -> origin/test-branch
* [new ref] refs/pull/1/merge -> origin/pull/1
$ git checkout pull/1
Branch 'pull/1' set up to track remote branch 'pull/1' from 'origin'.
Switched to a new branch 'pull/1'
临时获取和结帐示例(无需事先配置):
$ git fetch origin refs/pull/1/merge:pull/1
remote: Azure Repos
remote: Found 1 objects to send. (53 ms)
Unpacking objects: 100% (1/1), done.
From ssh.dev.azure.com:v3/aaaa/bbbb/cccc
* [new ref] refs/pull/1/merge -> pull/1
$ git checkout pull/1
Switched to branch 'pull/1'
最好定义一个具有相同 url 但不同 fetch 配置的新遥控器。
[remote "pull"]
url = <same-as-origin>
fetch = +refs/pull/*/merge:refs/remotes/pull/*
您可以通过以下方式查看拉取请求:
git fetch pull
git checkout pull/<pull-request-id>
这将避免当您使用具有两个不同获取配置的同一遥控器时出现的合并冲突。
这里有一个类似的答案和解释:https://stackoverflow.com/a/40701668/2312300