我想获得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 shortlog -s
输出:
14 John lennon
9 Janis Joplin
您可能想知道-s参数是——summary的缩写形式。
其他回答
Git shortlog是一种方法。
使用Bash语法,
$(git rev-list --count HEAD)
对于纯线性历史来说还好。如果你有时也想从分支中获得“数字”(基于master),考虑:
$(git rev-list --count $(git merge-base master HEAD)).$(git rev-list --count ^master HEAD)
当从master签出运行时,您得到的只是1234.0或类似的结果。当从分支的签出运行时,如果在该分支上已经进行了13次提交,那么您将得到类似于1234.13的结果。显然,这只在你基于一个给定的主修订的最多一个分支时有用。
first-parent可以加入到微号中,以抑制一些合并其他分支时产生的提交,尽管这可能是不必要的。
有一个很好的帮助脚本,Git人员使用它来帮助生成一个基于Git描述的有用的版本号。我展示了脚本,并在回答如何在Git项目的文件中包含当前提交id时解释了它。
我以前用的是:
git log | grep "^commit" | wc -l
简单但有效。
要获得两个分支(如feature分支和目标使用分支)之间不同的提交数:
Git rev-list——count feature_branch..target_branch