从Azure DevOps获取Git拉取请求

10

我想使用git获取在Azure DevOps托管的仓库中的Pull Requests列表。

Github有这个支持。我们只需要将以下内容添加到.git/config

[remote "origin"]
  fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

但是,当我尝试在Azure DevOps上使用相同的方法时,它没有获取到任何内容。我也尝试了git-extras包中的git-pr。

我猜想如果他们有支持,路径可能与refs/remotes/origin/pr/不同。他们有一个REST API端点来获取拉取请求,但我找不到使用git执行相同操作的任何信息。


发现远程可用的引用的一种方法是:git ls-remote <remote or url> - LeGEC
@LeGEC,谢谢!git ls-remote是任何远程的解决方案。 - nascarsayan
1个回答

20

对于Azure DevOps,配置略有不同。 您可以将以下内容添加到.git/config中:

[remote "origin"]
        fetch = +refs/pull/*/merge:refs/remotes/origin/pull/*

也可以像这样在没有事先配置的情况下执行一个 pull-request 的即时获取到本地分支:

git fetch origin refs/pull/$ID/merge:$LOCALBRANCH

示例fetch和checkout(附有配置):

$ 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'

关于上述配置更改的说明,git config --add remote.origin.fetch "+refs/pull/*/merge:refs/remotes/origin/pull/*"。如果您按照第一个示例--使用类似于git checkout pull/1自动设置新的本地分支--您可能刚刚创建了一个损坏的branch.pull/1.merge配置值,并且您可能会尝试只是git pull它以获取PR更新时遇到麻烦。请参见此处以了解如何解决该问题(在那里使用了“head”,而不是“merge”--因此不确定是否完全适用于此)。 - CrashNeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接