有没有办法不对
git for-each-ref
的操作进行排序,即按照命令行上指定的顺序保留它?
我的用例:我想从以下模式集中找到第一个(或最后一个)分支名称:
% git for-each-ref --format '%(refname:short)' 'refs/heads/dev/v*' 'refs/heads/develop' 'refs/heads/master' 'refs/heads/main'
develop
main
master
但是,正如您所看到的,
main
出现在master
之前,因为根据--sort
的文档,“当未指定时,使用refname
。”
如果这是一个 x-y 问题 - 这是寻找开发头的启发式别名的一部分(使用我们团队方便的任何优先级),所以如果有人对此有更好的技术,我也会感兴趣。
# Determine the development head of this repository. If there's not one, assume we're using mainline development.
# Handy for rebasing feature branches.
dev-branch = "!f() { \n\
git for-each-ref --format '%(refname:short)' 'refs/heads/dev/v*' 'refs/heads/develop' 'refs/heads/main' 'refs/heads/master' | \n\
head -n 1; \n\
}; f"
很可能不会。 'refs/heads/dev/v*' 无论如何都必须排序;顺便说一句,如果有很多
v*
,您确定要获得第一个,而不是最后一个吗?好吧,除了一一检查之外,我没有看到任何其他方法:
for branch in 'refs/heads/dev/v*' 'refs/heads/develop' 'refs/heads/main' 'refs/heads/master'; do
git for-each-ref --format '%(refname:short)' "$branch"
done