0

与使用 git-review 下载的本地分支关联的 Gerrit 补丁集编号

考虑 Gerrit 的变化,比如 change 1234,具有以下补丁集

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

我使用以下方法检查2更改的补丁集git-review

$ git review -d 1234,2
Downloading refs/changes/00/1234/2 from gerrit
Switched to branch "review/foo_bar/1234"

问题:

  • 在分支上review/foo_bar/1234(上述命令后没有更改review),是否有可能查询与分支关联的 Gerrit 补丁集编号?IE

    $ ... ?
    2
    

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

4

1 回答 1

1

您可以使用 ssh 查询接口和提交 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)

只是为了好玩,我抓住了 patchset 415754,这让我:

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

如果我运行上面的ssh ...查询,我会得到一大段文本,其中包括如下内容:

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

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

您可以通过 ( --format jsona) 使用 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"
于 2017-11-23T19:05:46.540 回答