我想获得Git存储库的提交数量,有点像SVN的修订号。
我们的目标是将其用作唯一的、递增的构建号。
我目前这样做,在Unix/Cygwin/msysGit上:
git log --pretty=format:'' | wc -l
但我觉得它有点过时了。
有更好的办法吗?如果我实际上不需要wc甚至Git,那么它就可以在裸Windows上工作,那就太棒了。只要读取一个文件或目录结构…
我想获得Git存储库的提交数量,有点像SVN的修订号。
我们的目标是将其用作唯一的、递增的构建号。
我目前这样做,在Unix/Cygwin/msysGit上:
git log --pretty=format:'' | wc -l
但我觉得它有点过时了。
有更好的办法吗?如果我实际上不需要wc甚至Git,那么它就可以在裸Windows上工作,那就太棒了。只要读取一个文件或目录结构…
当前回答
Git配置——全局别名。计数“rev-list—all—Count”
如果你把它添加到你的配置中,你可以只引用命令;
git 计数
其他回答
有一个很好的帮助脚本,Git人员使用它来帮助生成一个基于Git描述的有用的版本号。我展示了脚本,并在回答如何在Git项目的文件中包含当前提交id时解释了它。
要将其转换为变量,最简单的方法是:
export GIT_REV_COUNT=`git rev-list --all --count`
你不是第一个在Git中考虑“修订号”的人,但是“wc”是相当危险的,因为commit可以被删除或压缩,历史可以被重新审视。
“修订号”对于Subversion来说尤其重要,因为在合并时需要它(SVN1.5和1.6在这方面有所改进)。
您可能最终得到一个预提交钩子,它将在注释中包含一个修订号,而算法不需要查找分支的所有历史记录来确定正确的数字。
Bazaar实际上提出了这样一个算法,对于您想要做的事情来说,它可能是一个很好的起点。
(正如Bombe的回答所指出的,Git实际上有自己的算法,基于最新的标记,加上提交的数量,再加上一点SHA-1密钥)。如果他的回答对你有用,你应该看看(并投票)。
为了说明Aaron的想法,您还可以将Git提交散列附加到随应用程序分发的应用程序的“info”文件中。
这样,about框看起来就像这样:
应用程序编号是提交的一部分,但“应用程序的“信息”文件”是在打包过程中生成的,有效地将应用程序构建号与技术修订id链接起来。
如果你只使用一个分支,比如master,我认为这会很好:
git rev-list --full-history --all | wc -l
这将只输出一个数字。你可以将它别名为
git revno
让事情变得更方便。要做到这一点,编辑你的.git/配置文件,并添加到:
[alias]
revno = "!git rev-list --full-history --all | wc -l"
这将不能在Windows上工作。我不知道该操作系统的“wc”对应的是什么,但编写一个Python脚本来为您进行计数将是一个多平台解决方案。
编辑:获得两次提交之间的计数:
我正在寻找一个答案,该答案将显示如何获得两个任意修订之间的提交数,但没有看到任何答案。
git rev-list --count [older-commit]..[newer-commit]
有一些很酷的方法可以做到这一点
第一个方法
git shortlog -s
该命令打印所有参与repo的用户的提交计数列表。
956 Pankaj Tanwar
235 The Ninja
540 The Hardcore Geek
664 The Ever Shining Star
984 The Experienced Man
简单地说,要获得总提交数-
git shortlog -s |抓住“潘卡伊·坦瓦尔”
它打印-
956 Pankaj Tanwar
另一种干净又酷的方法是-
git rev-list HEAD --author="Pankaj Tanwar" --count
要计算贡献的代码行数和提出的拉请求总数,请查看此博客