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

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

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

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

但我觉得它有点过时了。

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


当前回答

git rev-list HEAD -count

git rev-list

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

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

其他回答

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

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

或者列出存储库中贡献者所做的所有提交

git shortlog -s

一个简单的方法是:

 git log --oneline | wc -l

Oneline确保了这一点。

Git配置——全局别名。计数“rev-list—all—Count”

如果你把它添加到你的配置中,你可以只引用命令;

git 计数

如果你只使用一个分支,比如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]