当前位置:  开发笔记 > 运维 > 正文

我如何获得Git提交计数?

如何解决《我如何获得Git提交计数?》经验,为你挑选了12个好方法。

我想得到我的Git存储库的提交数量,有点像SVN版本号.

目标是将其用作唯一的递增构建号.

我目前在Unix/Cygwin/msysGit上喜欢这样:

git log --pretty=format:'' | wc -l

但我觉得这有点像黑客.

有没有更好的方法呢?如果我真的不需要wc甚至是Git 会很酷,所以它可以在裸Windows上工作.只需读取文件或目录结构......



1> Benjamin Atk..:

获取修订的提交计数(HEAD,master提交哈希):

git rev-list --count 

要获取所有分支的提交计数:

git rev-list --all --count

我建议不要将它用于构建标识符,但如果必须,最好使用你正在构建的分支的计数.这样,相同的修订版将始终具有相同的编号.如果对所有分支使用计数,则其他分支上的活动可能会更改该数字.


`git shortlog | grep -E'^ [] +\w +'| wc -l`如果你想获得总数和`git shortlog | grep -E'^ [^]'`如果你想获得每个贡献者的提交数量.
@BenAtkin:道歉; 我不打算冒犯,只是事实.关于回复日期的观点.当时,您的解决方案可能是最好的解决方案.但我坚持认为,现在`git rev-list HEAD --count`是一个更好的解决方案.
这个解决方案都很hacky(类似于原始问题中给出的`git log --pretty = format:''| wc -l`方法)并且不正确:你可以通过反转匹配来看到这个(`git shortlog | grep - Ev'^ [] +\w +'`)并且看到例如没有消息的提交(即"")不被计算.使用`git rev-list HEAD --count`更简洁,更准确.
添加了答案,也适用于旧版本:`git log --oneline | wc -l`
谢谢你指出`wc -l`.极简主义FTW.我把它纳入了我的答案.

2> Rayne..:

git shortlog 是一种方式.


TY.在计算范围内的提交时,这对我有用; git shortlog sha1..sha2
提交的数量按提交者分组,不太好.可以在git shortlog中计算行数,但由于某些原因(pager?),这对于没有终端的ssh不起作用.提问者的原始解决方案是最好的!git log --pretty = format:''| wc -l
但是,我建议使用`git rev-list HEAD --count`而不是OP中给出的原始方法.在我的测试中,`git log --pretty = format:''| wc -l`是一个人.
@ctrueden`​​git log --oneline | wc -l`没有关闭(OS X 10.8.5).

3> Jake Berger..:

git rev-list HEAD --count

git rev-list

git rev-list :通过跟随给定提交的父链接(在本例中为HEAD)可以访问的列表提交.

--count :打印一个数字,说明将列出多少次提交,并禁止所有其他输出.



4> Alex Pliutau..:

此命令返回由提交者分组的提交计数:

git shortlog -s


`git shortlog`本身并不能解决*total*提交次数的原始问题(未按作者分组).使用`git rev-list HEAD --count`代替.
真棒!你可以按`|排序 排序-n`也是

5> Bombe..:

如果您正在为提交寻找一个唯一且仍然可读的标识符,那么git describe可能就是您的最佳选择.


这可能会起作用,并且比定制的算法更容易使用.+1
我不知道git描述.标签名称和sha1之间的这个小数字就是我正在寻找的.谢谢.
看一下GIT-VERSION-GEN脚本及其在git存储库中的使用方法,以及Linux内核源代码中的类似脚本(以及它们在Makefile中的使用方式).
是的,那是因为*incremental*ID的*concept*对分布式版本控制系统没有任何意义.

6> VonC..:

你并不是第一个考虑Git中"修订号"的人,但是' wc'非常危险,因为提交可以被删除或压缩,并重新审视历史.

"版本号"对于Subversion尤为重要,因为在合并的情况下需要它(SVN1.5和1.6在这方面有所改进).

您最终可能会得到一个预提交挂钩,其中包含注释中的修订号,其算法不涉及查找分支的所有历史记录以确定正确的数字.

Bazaar实际上提出了这样一种算法,它可能是你想要做的一个很好的起点.

(正如Bombe的回答所指出的,Git实际上有一个自己的算法,基于最新的标签,加上提交的数量,再加上一些SHA-1密钥).如果适合你,你应该看到(并且赞成)他的答案.


为了说明Aaron的想法,您还可以将Git提交哈希附加到您随应用程序分发的应用程序的"info"文件中.

那样,about box看起来像:

关于盒子

应用程序编号是提交的一部分,但"应用程序"信息"文件"是在打包过程中生成的,有效地将应用程序内部版本号与技术修订版ID相关联.


我已经更新了我的脚本以使用Xcode 3.您可以从http://gist.github.com/208825获取最新版本.

7> demenvil..:

你可以使用:

git shortlog -s -n

结果:

 827  user one
    15  user two
     2  Gest 



8> John Gietzen..:

要将其变为变量,最简单的方法是:

export GIT_REV_COUNT=`git rev-list --all --count`


实际上,`git rev-list`是正确使用的工具,而不是像其他人说的那样`git log`.

9> Jimmy Kane..:

一个简单的方法是:

 git log --oneline | wc -l

oneline 确保.



10> Sri Murthy U..:

Git shortlog是获取提交详细信息的一种方法:

git shortlog -s -n

这将给出作者姓名后面的提交数量.-s选项删除作者所做的每个提交的所有提交消息.如果您还想查看提交消息,请删除相同的选项.-n选项用于对整个列表进行排序.希望这可以帮助.


`git shortlog`本身并不能解决*total*提交次数的原始问题(未按作者分组).使用`git rev-list HEAD --count`代替.

11> 小智..:

git rev-parse --short HEAD



12> Pat Notz..:

有一个很好的帮助程序脚本,Git人员用它来帮助生成基于Git描述的有用版本号.我在我的回答中展示了脚本并解释了它如何在Git项目的文件中包含当前的提交ID?.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有