列出通过 git-review 下载的本地分支的相关 Gerrit 补丁集编号

List associated Gerrit patch set number for local branch downloaded via git-review

使用 git-review

下载的与本地分支关联的 Gerrit 补丁集编号

考虑对 Gerrit 进行更改,比如更改 1234,具有以下补丁集

# Gerrit change 1234 (https://mygerrit.somewhere.net/#/c/1234/)
1 (original commit)
2 (some amendments)
3 (some amendments)

我使用 git-review:

检查补丁集 2 的变化
$ git review -d 1234,2
Downloading refs/changes/00/1234/2 from gerrit
Switched to branch "review/foo_bar/1234"

问题:

我自己想出的唯一方法是利用 git ls-remote 来识别给定更改的所有补丁集编号(及其相关的 SHA 哈希值),然后将哈希值与本地分支的 HEAD (git rev-parse HEAD) 的散列。或者只是将本地 HEAD 的散列与 git ls-remote 匹配并从那里提取补丁集编号,但我希望有一种更简洁的方法。

您可以使用ssh 查询接口和commit id 查询gerrit。例如,如果我的 gerrit 遥控器是...

$ git remote -v
gerrit  ssh://lars@review.openstack.org:29418/openstack/tripleo-quickstart.git (fetch)

...然后我可以像这样进行 gerrit 查询:

ssh -p 29418 lars@review.openstack.org gerrit query $(git rev-parse HEAD)

为了好玩,我抓住了补丁集 415754,这让我:

$ git log -1
commit c5852f3f29f0a08236261772e8cd892eba381597 (HEAD -> review/leif_madsen/415754)

如果我 运行 上面的 ssh ... 查询,我将返回一大段文本,其中将包含如下内容:

  patchSets:
    number: 1
    revision: a8eedf9e6c87f6542ea1802a493d9d5caa7acaa2
    [...]
  patchSets:
    number: 2
    revision: c5852f3f29f0a08236261772e8cd892eba381597
    [...]

只需查找与您当前的提交 ID 相匹配的补丁集。在这种情况下,您可以看到我有补丁集 2.

您可以通过 (a) 使用 --format json 请求 JSON 输出和 (b) 使用 JSON 查询工具(例如 jq:

$ ssh -p 29418 lars@review.openstack.org gerrit query \
  $(git rev-parse HEAD) --patch-sets --format json |
  head -1 | jq '.patchSets[] |
  select(.revision=="'"$(git rev-parse HEAD)"'").ref'

在这种情况下,产生输出:

"refs/changes/54/415754/2"