首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能对git的输入和输出进行不同的排序?

是否有可能对git的输入和输出进行不同的排序?
EN

Stack Overflow用户
提问于 2018-08-21 18:45:23
回答 2查看 274关注 0票数 0

Git的for-each-ref命令有一个--count选项和一个--sort选项,这两个选项看起来都很简单,但是在一起使用时会产生问题。

排序用于确定计数是如何应用的,因此如果我用committerdate进行反向排序

代码语言:javascript
复制
git for-each-ref --count=30 --sort='-committerdate' refs/heads/ --format="%(refname:short)"

然后我得到了最近的最高承诺。如果我想从底部得到最近的提交,倒转排序不是解决方案,因为它将更改列表中出现的提交。

我想要最后一次提交(这需要reverse-chronological排序),但是我希望它们按chronological顺序显示,所以最近的提交在底部,因此即使列表中的行比屏幕多,并且接近我当前的命令提示符,也可以在屏幕上显示。

是否有任何方法只使用Git (可能是其他命令而不是for-each-ref)来完成此操作?而且不需要通过另一组命令(这将降低效率并引入新的问题,比如避免剥离颜色的额外工作-我实际上使用的format字符串比上面显示的要复杂得多)。

EN

回答 2

Stack Overflow用户

发布于 2018-08-21 18:59:25

简短回答:不。

较长的答覆:

..。而且不需要通过另一组命令(这将降低效率,并引入新的问题,比如避免剥离颜色的额外工作-我实际上使用的格式字符串比上面所示的要复杂得多)。

效率的论点是有效的,但是..。只需做一些额外的工作,例如:

代码语言:javascript
复制
git for-each-ref --format=... --sort=... ... | sort -k1 -s | tail +<count> | cut -f2-

其中,--formatsort命令所需的(非彩色)排序键作为装饰放在字段1中,然后用cut -f2-剥离。考虑一下通常的装饰-排序-取消装饰算法:由于--format,初始输入中存在装饰,而在未用于排序的字段中,sort -s本身是稳定的。

(显然,sort -s并不标准,但它得到了相当广泛的支持。)

票数 1
EN

Stack Overflow用户

发布于 2018-08-21 20:24:50

这归功于对基本想法的理解,但他的解决方案需要一些调整才能为我工作。(我尝试了GNU版本,以防与BSD和GNU实用程序相关,但这并没有解决任何问题。)我不能确定他不会在其他地方工作,所以,我不是“正确”的实际工作,我是单独添加这一点。

以下是对我起作用的东西:

代码语言:javascript
复制
YELLOW_HEAD="%(if)%(HEAD)%(then)%(color:bold yellow)%(else)%(color:white)%(end)"
git for-each-ref --color=always --count=30 --sort='-committerdate' refs/heads/ --format="%(committerdate:short) ${YELLOW_HEAD}%(committerdate:short)  %(refname:short)" | sort -k1 -s | cut -f2- -d' '

我还添加了我的格式,因为答案是完整的。

与托瑞克的回答不同:

  • 一开始,我在-之后使用了+而不是tail
  • 然后我意识到我不需要尾巴,因为我依赖git-for-each-ref来过滤计数--而且由于我是而不是,所以我依赖它进行排序,这不是一个问题。
  • 我增加了格式设置,这破坏了sort正确排序的能力
  • 我为cut命令定义了分隔符
  • 我告诉git-for-each-ref总是显示颜色,没有颜色它就会先关闭颜色
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51954901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档