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

标签 git gerrit 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"

问题:

  • 在分支 review/foo_bar/1234 上时(在上面的 review 命令之后没有任何更改),是否可以查询关联的 Gerrit 补丁集编号与分支机构?即

    $ ... ?
    2
    

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

最佳答案

您可以使用 ssh 查询接口(interface)和提交 id 来查询 gerrit。例如,如果我的 gerrit Remote 是...

$ git remote -v
gerrit  ssh://<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3955584b4a794b5c4f505c4e1756495c574a4d585a5217564b5e" rel="noreferrer noopener nofollow">[email protected]</a>:29418/openstack/tripleo-quickstart.git (fetch)

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

ssh -p 29418 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5d313c2f2e1d2f382b34382a73322d38332e293c3e3673322f3a" rel="noreferrer noopener nofollow">[email protected]</a> 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 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fe929f8c8dbe8c9b88979b89d0918e9b908d8a9f9d95d0918c99" rel="noreferrer noopener nofollow">[email protected]</a> 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"

关于git - 列出通过 git-review 下载的本地分支的关联 Gerrit 补丁集编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47461452/

相关文章:

git diff 命令排除一些文件夹和文件

git - Gerrit 能否代替 Trac 进行问题跟踪和代码浏览

gerrit - 如何制作 Gerrit 提醒机器人?

gerrit - 添加 gerrit 组作为审阅者

git - 强制覆盖 TortoiseGit 推送对话中缺少的现有分支

git - 如何使 gerrit Slave 只读?

git 无法 rm --cached 文件

git - 如何在 `git` 中运行 commit 命令后执行脚本

Git 审查 : submit particular commit from multiple commits

python - 在 macOS Sierra 上使用 git-review 的 RequestsDependencyWarning