有没有一种方法可以在不使用awk的情况下获取git中额外提交的数量?

3

如果我在Git中有一些标签,我可以使用以下命令:

git describe --tags | awk -F- '{ print $2 }'

要显示自上个标签以来的提交次数。是否有一种只使用git命令就可以获得这个数字的方法?

这个命令没有显示自从我的上一个标签以来的提交数量 - 预期输出是什么?应该是 print $3 吗?注意:我的上一个标签也有一个破折号,可能是为什么这与你的结果不同的原因。 - scrowler
1
简短回答是“不行”,因为git describe的内部计数算法非常复杂。但是,如果您知道一些特定的标记,可以使用git rev-list --count <tag>..(即计算从HEAD可达但不从给定的<tag>可达的修订次数)来获得相当接近,或者足够接近的结果。这在合并存在时会产生误导性的值;--first-parent可能有所帮助,但也可能会有所损失。(这就是git describe内部计数的复杂性所在。) - torek
我主要希望能够获得类似于git log中可以提供一些格式说明符的功能。 - Wayne Werner
@torek - 你可以通过编程方式获取最新的标签。 - Lazy Badger
@RobbieAverill - 是的,标签名称中的破折号是问题所在,git describe 的格式显然是 TAGNAME-COUNT_AFTER-gHASH - Lazy Badger
@LazyBadger:啊,我明白了,很狡猾:让git describe为你生成它! - torek
1个回答

4

Git黑魔法:

git rev-list --count `git describe --abbrev=0 --tags` HEAD

或许稍微修改一下(没有Git,无法测试,只是从记忆中写的)。
git rev-list --count `git describe --abbrev=0 --tags`..HEAD

注:
git log <RANGE> --pretty=oneline | wc -l

会起作用,但比rev-list慢很多。


这里我再次思考Mercurial“为人类而制造”。只需将git的意大利面条与简洁干净的hg log -l 1 -T"{latesttagdistance}\n"进行比较。 - Lazy Badger
这是其中的中间一个:计算标签后的修订次数,直到HEAD,使用<tag>..HEAD,其中<tag>来自您的git describe技巧。 - torek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接