获取Gerrit Change的最新refspec

Jos*_*ose 9 git ssh gerrit refspec

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

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

ssh -p $ REVIEW_SERVER_PORT $ GERRIT_REVIEW_SERVER gerrit query --format = TEXT --current-patch-set $ CHANGE_SHA | grep ref.

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

fra*_*acz 7

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

ssh -p 29418 review.example.com gerrit query --current-patch-set --format=JSON change:4665
Run Code Online (Sandbox Code Playgroud)

哪个输出:

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

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


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

如果您想获得最新的补丁补丁2392:

git ls-remote | grep /2392/ | awk '{print $2}' | sed 's/\// /g' | sort -n -k5 | tail -n 1 | sed 's/ /\//g'
Run Code Online (Sandbox Code Playgroud)

哪个输出refs/changes/92/2392/12为我的回购.

或者,当您想从Gerrit获得最后一次更改时:

git ls-remote | awk '{print $2}' | sed 's/\// /g' | sort -n -k4 | tail -n 1 | sed 's/ /\//g'
Run Code Online (Sandbox Code Playgroud)

哪个输出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
Run Code Online (Sandbox Code Playgroud)

因此,为了从特定的变化中挑选所有补丁集,我们需要grep结果/NUMBER/,这解释了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
Run Code Online (Sandbox Code Playgroud)

现在我们要选择最后一个补丁集.我们需要分类.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
Run Code Online (Sandbox Code Playgroud)

最后要做的是选择尾部的最后一行并将空格替换为斜杠.瞧!

从Gerrit中选择最新的更改是以相同的方式完成的,但没有grep并按第四列排序(Change-Id).