gpt4 book ai didi

git - 获取有关 Gerrit 更改的最新 refspec

转载 作者:太空狗 更新时间:2023-10-29 12:47:00 27 4
gpt4 key购买 nike

如何通过单个命令获取有关 gerrit 更改的最新 refspec。我需要输出为“refs/changes/11/1234/4”。是否有相同的 git 命令

我知道结合 gerrit 查询和一些脚本的 ssh 命令可以获得这个,但想知道是否有更好的方法来做同样的事情。以下是我用来获取 refspec 的 ssh 命令。

ssh -p $REVIEW_SERVER_PORT $GERRIT_REVIEW_SERVER gerrit 查询 --format=TEXT --current-patch-set $CHANGE_SHA | grep 引用

同样,我也想获得 gerrit 更改的最新补丁集

最佳答案

你应该使用 gerrit query .给定更改编号 4665:

ssh -p 29418 review.example.com gerrit query --current-patch-set --format=JSON change:4665

哪些输出:

{  
"project":"xx",
"branch":"master",
"topic":"TOPIC",
"id":"I0b6fc492fd08749e409c359a73d74e7795f50cc9",
"number":"4665",
// ...
"currentPatchSet":{
"number":"5",
"revision":"ae3a5d2684991070041e1c34b5a16b1376dc3ce5",
"parents":[
"5b21793cadd3dc55008ef6c8dc658e127d80c097"
],
"ref":"refs/changes/65/4665/5",
// ...
}
}

在哪里可以找到 currentPatchSet.ref 字段。


旧的、过于复杂的解决方案:

前提是你想获取最新的patchset of change 2392:

git ls-remote | grep /2392/ | awk '{print $2}' | sed 's/\// /g' | sort -n -k5 | tail -n 1 | sed 's/ /\//g'

为我的代码库输出 refs/changes/92/2392/12

或者,当您想要从 Gerrit 获取最后的更改时:

git ls-remote | awk '{print $2}' | sed 's/\// /g' | sort -n -k4 | tail -n 1 | sed 's/ /\//g'

为我的代码库输出 refs/changes/54/2554/2


解释

git ls-remote命令显示远程存储库中的所有引用,因此对于 Gerrit - 每个补丁集也会列出。它输出如下内容:

2ccddbfb34a98e8ba461964fae3766aa41be944d        refs/changes/91/2291/7
d00c21c28d07626caea27594489442696ea39231 refs/changes/91/2291/8
8c05e6551a6a34c33a36669bf7e83c996569e24d refs/changes/91/2291/9
bc6762ac7b9ac5a74fc2e548df2541cb83977ec5 refs/changes/91/2391/1
3bd96c0d1ba2d561fa484ddfc264fabbf86aa536 refs/changes/91/2391/2

因此,为了从特定更改中选择所有补丁集,我们需要通过 /NUMBER/ grep 结果,这解释了 grep/2392/。之后,通过使用 awk 选择第二列,结果为:

refs/changes/92/2392/1
refs/changes/92/2392/10
refs/changes/92/2392/11
refs/changes/92/2392/12
refs/changes/92/2392/2
refs/changes/92/2392/3
refs/changes/92/2392/4
refs/changes/92/2392/5
refs/changes/92/2392/6
refs/changes/92/2392/7
refs/changes/92/2392/8
refs/changes/92/2392/9

现在我们要选择最后一个补丁集。我们需要分类。 sort命令能够使用 -n 按数字排序,我们可以使用 -kX 参数指定要在哪一列上执行排序。但它需要用空格分隔列(AFAIK),所以我们需要用空格替换我们的 / 分隔符。我们使用 sed为了它。第一次替换后,每个 refs/changes/92/2392/X 变为 refs changes 92 2392 X。然后对第五列(补丁集编号)执行排序。结果:

refs changes 92 2392 1
refs changes 92 2392 2
refs changes 92 2392 3
refs changes 92 2392 4
refs changes 92 2392 5
refs changes 92 2392 6
refs changes 92 2392 7
refs changes 92 2392 8
refs changes 92 2392 9
refs changes 92 2392 10
refs changes 92 2392 11
refs changes 92 2392 12

最后要做的是用 tail 选择最后一行并将空格替换回斜线。瞧!

以相同的方式从 Gerrit 中选择最新更改,但不使用 grep 并按第四列 (Change-Id) 排序。

关于git - 获取有关 Gerrit 更改的最新 refspec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22264533/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com