我想得到我的Git存储库的提交数量,有点像SVN版本号.
目标是将其用作唯一的递增构建号.
我目前在Unix/Cygwin/msysGit上喜欢这样:
git log --pretty=format:'' | wc -l
但我觉得这有点像黑客.
有没有更好的方法呢?如果我真的不需要wc
甚至是Git 会很酷,所以它可以在裸Windows上工作.只需读取文件或目录结构......
获取修订的提交计数(HEAD
,master
提交哈希):
git rev-list --count
要获取所有分支的提交计数:
git rev-list --all --count
我建议不要将它用于构建标识符,但如果必须,最好使用你正在构建的分支的计数.这样,相同的修订版将始终具有相同的编号.如果对所有分支使用计数,则其他分支上的活动可能会更改该数字.
git shortlog
是一种方式.
git rev-list HEAD --count
git rev-list
git rev-list
:通过跟随给定提交的父链接(在本例中为HEAD)可以访问的列表提交.
--count
:打印一个数字,说明将列出多少次提交,并禁止所有其他输出.
此命令返回由提交者分组的提交计数:
git shortlog -s
如果您正在为提交寻找一个唯一且仍然可读的标识符,那么git describe可能就是您的最佳选择.
你并不是第一个考虑Git中"修订号"的人,但是' wc
'非常危险,因为提交可以被删除或压缩,并重新审视历史.
"版本号"对于Subversion尤为重要,因为在合并的情况下需要它(SVN1.5和1.6在这方面有所改进).
您最终可能会得到一个预提交挂钩,其中包含注释中的修订号,其算法不涉及查找分支的所有历史记录以确定正确的数字.
Bazaar实际上提出了这样一种算法,它可能是你想要做的一个很好的起点.
(正如Bombe的回答所指出的,Git实际上有一个自己的算法,基于最新的标签,加上提交的数量,再加上一些SHA-1密钥).如果适合你,你应该看到(并且赞成)他的答案.
为了说明Aaron的想法,您还可以将Git提交哈希附加到您随应用程序分发的应用程序的"info"文件中.
那样,about box看起来像:
应用程序编号是提交的一部分,但"应用程序"信息"文件"是在打包过程中生成的,有效地将应用程序内部版本号与技术修订版ID相关联.
你可以使用:
git shortlog -s -n
结果:
827 user one 15 user two 2 Gest
要将其变为变量,最简单的方法是:
export GIT_REV_COUNT=`git rev-list --all --count`
一个简单的方法是:
git log --oneline | wc -l
oneline
确保.
Git shortlog是获取提交详细信息的一种方法:
git shortlog -s -n
这将给出作者姓名后面的提交数量.-s选项删除作者所做的每个提交的所有提交消息.如果您还想查看提交消息,请删除相同的选项.-n选项用于对整个列表进行排序.希望这可以帮助.
git rev-parse --short HEAD
有一个很好的帮助程序脚本,Git人员用它来帮助生成基于Git描述的有用版本号.我在我的回答中展示了脚本并解释了它如何在Git项目的文件中包含当前的提交ID?.