我想获得Git存储库的提交数量,有点像SVN的修订号。

我们的目标是将其用作唯一的、递增的构建号。

我目前这样做,在Unix/Cygwin/msysGit上:

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

但我觉得它有点过时了。

有更好的办法吗?如果我实际上不需要wc甚至Git,那么它就可以在裸Windows上工作,那就太棒了。只要读取一个文件或目录结构…


当前回答

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

git rev-list --count <revision>

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

git rev-list --all --count

我不建议将此用于构建标识符,但如果必须,最好将此计数用于构建所针对的分支。这样,相同的修订将总是有相同的数字。如果对所有分支使用该计数,其他分支上的活动可能会改变该数字。

其他回答

如果您正在为提交寻找一个唯一且可读性强的标识符,那么git describe可能正是适合您的东西。

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

有一些很酷的方法可以做到这一点

第一个方法

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 

要计算贡献的代码行数和提出的拉请求总数,请查看此博客

git rev-list HEAD -count

git rev-list

Git rev-list <commit>: 列出通过从给定提交(在本例中为HEAD)的父链接可以到达的提交。

——count:打印一个数字,说明有多少提交被列出,并抑制所有其他输出。

在我们公司,我们从SVN转移到Git。缺乏修订数字是一个大问题!

执行git svn clone,然后用它的svn修订号标记上一次提交的svn:

export hr=`git svn find-rev HEAD`
git tag "$hr" -f HEAD

然后你可以在的帮助下得到修订号

git describe --tags --long

这个命令会给出如下内容:

7603-3-g7f4610d

含义:最后一个标签是7603 -这是SVN的修订。3 -是从它提交的计数。我们需要把它们加起来。

因此,修订号可以通过以下脚本计算:

expr $(git describe --tags --long | cut -d '-' -f 1) + $(git describe --tags --long | cut -d '-' -f 2)