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

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

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

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

但我觉得它有点过时了。

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


当前回答

在我们公司,我们从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)

其他回答

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

git rev-list --count <revision>

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

git rev-list --all --count

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

Git shortlog是获取提交细节的一种方法:

git shortlog -s -n

这将给出提交数和作者名称。s选项删除作者每次提交的所有提交消息。如果还希望看到提交消息,则删除相同的选项。-n选项用于对整个列表进行排序。希望这能有所帮助。

下面的命令打印当前分支上的提交总数。

git shortlog -s -n  | awk '{ sum += $1; } END { print sum; }' "$@"

它由两部分组成:

打印按作者分组的日志总数(git shortlog -s -n) 示例输出 1445年约翰C 1398汤姆D 1376克里斯托弗·P 166贾斯汀·T 166年,你 将每个作者的提交总数相加,即每行的第一个参数,并打印出结果(awk '{Sum += $1;}结束{打印sum;}“$ @”) 使用与上面相同的例子,它将得到1445 + 1398 + 1376 + 166 + 166。因此输出将是: 4551年

一个简单的方法是:

 git log --oneline | wc -l

Oneline确保了这一点。

这个命令返回按提交者分组的提交计数:

git shortlog -s

输出:

14 John lennon
9  Janis Joplin

您可能想知道-s参数是——summary的缩写形式。