使用git for-each-ref可以进行嵌套插值吗

wbgh16ku  于 12个月前  发布在  Git
关注(0)|答案(1)|浏览(119)

当为git for-each-ref指定--format参数时,我可以使用内插值作为另一个内插值的参数吗?具体来说,我想查看不同远程上分支的前后计数,所以我想将分支名称内插到%(ahead-behind)中作为%(ahead-behind:origin/%(refname:strip=3))
我可以通过使用固定引用(如HEAD)来使用%(ahead-behind)而不使用嵌套插值:

$ git for-each-ref \
    --format='%(refname:strip=3) %(ahead-behind:HEAD)' \
    refs/remotes/oldlaptop

字符串
但是,当我尝试嵌套插值以引用不同远程上具有相同名称的分支时,我得到了一个错误:

$ git for-each-ref \
    --format='%(refname:strip=3) %(ahead-behind:origin/%(refname:strip=3))' \
    refs/remotes/oldlaptop
fatal: failed to find 'origin/%(refname:strip=3'


还有其他语法可以用吗?

wnavrhmk

wnavrhmk1#

不幸的是,看起来这个选项的编码是“将所有引用与固定引用进行比较”。
一个用例是:对于每个分支,查看如果打开一个合并请求,您将有多少提交提前/延迟
例如这篇文章:
https://github.blog/2023-06-01-highlights-from-git-2-41/(搜索“如果你在GitHub上查看过仓库的分支页面.”段落)
代码(参见ref-filter.c 1l.957和l.888)还显示,只要格式字符串被解析,:committish引用就被转换为提交散列 * 一次 *-而不是:在每次迭代时重新解释。
解决方法是在输出行上循环,并执行一个新命令以获得提前/落后计数。
下面是一个示例:

$ git for-each-ref \
    --format='%(refname:strip=3) origin/%(refname:strip=3)' \
    refs/remotes/oldlaptop |
   while read branch upstream; do
     git for-each-ref \
       --format="$branch [ahead %(ahead-behind:$upstream) behind] $upstream" \
       oldlaptop/"$branch";
   done

# sample output:
master [ahead 12 16 behind] origin/master
...

字符串
@jthill建议使用以下变体:让git for-each-ref打印命令,为每个引用运行:

git for-each-ref \
  --format="git for-each-ref --format='%(refname:strip=3) %%(ahead-behind=origin/%(refname:strip=3))' %(refname)" \
  refs/remotes/oldlaptop

# check that the above command generates an output that makes sense,
# then run:
<command...> | bash


master分支的1个状态2023-12-14

相关问题