如何获取Git提交计数?

如何获取Git提交计数?,git,build-process,revision,Git,Build Process,Revision,我想获得Git存储库的提交次数,有点像SVN修订号 目标是将其用作唯一的递增版本号 我目前在Unix/Cygwin/msysGit上就是这样做的: git log --pretty=format:'' | wc -l 但我觉得这有点像黑客 有更好的方法吗?如果我真的不需要wc甚至Git,那么它就可以在光秃秃的窗口上工作,那就太酷了。只需读取一个文件或目录结构…您不是第一个想到提交的人,但是“wc”是非常危险的,因为提交可以被擦除或压缩,历史记录也可以被重新访问 “修订号”对于Subversio

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

目标是将其用作唯一的递增版本号

我目前在Unix/Cygwin/msysGit上就是这样做的:

git log --pretty=format:'' | wc -l
但我觉得这有点像黑客


有更好的方法吗?如果我真的不需要
wc
甚至Git,那么它就可以在光秃秃的窗口上工作,那就太酷了。只需读取一个文件或目录结构…

您不是第一个想到提交的人,但是“
wc
”是非常危险的,因为提交可以被擦除或压缩,历史记录也可以被重新访问

“修订号”对于Subversion尤其重要,因为它(SVN1.5和1.6在这方面有所改进)

您可能会得到一个预提交钩子,该钩子将在注释中包含一个修订号,该算法不涉及查找分支的所有历史来确定正确的编号

这可能是你想做的一个好的起点

(正如所指出的,Git实际上有自己的算法,基于最新的标记,加上提交次数,再加上一点SHA-1密钥)。如果他的答案对你有用,你应该看看(并投票表决)


为了说明这一点,您还可以在发布应用程序时使用

这样,“关于”框将如下所示:


应用程序编号是提交的一部分,但“应用程序的“信息”文件是在打包过程中生成的,有效地将应用程序版本号链接到技术修订id。

在生成过程中生成一个编号并将其写入文件。无论何时发布,请使用注释“Build 147”(或当前的版本号)提交该文件。在正常开发期间不要提交文件。通过这种方式,您可以轻松地在Git中的内部版本号和版本之间进行映射。

如果您正在为提交寻找一个唯一且仍然可读的标识符,可能正适合您。

有一个很好的帮助器脚本,Git人员使用它来帮助根据Git描述生成有用的版本号。我展示了脚本,并在对的回答中对其进行了解释。

git rev parse——短头
git shortlog
是一种方法。

要获取修订的提交计数(
主文件
,提交哈希):


我建议不要将此作为构建标识符,但如果必须使用,则最好使用构建所针对的分支的计数。这样,同一版本将始终具有相同的编号。如果对所有分支使用计数,则其他分支上的活动可能会更改该数字。

要将其放入变量中,最简单的方法是:

export GIT_REV_COUNT=`git rev-list --all --count`

我以前用的是:

git log | grep "^commit" | wc -l

简单但有效。

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

git shortlog -s
输出:

14 John lennon
9  Janis Joplin

您可能想知道
-s
参数是
--summary

的收缩形式。如果您只使用一个分支,例如master,我认为这将非常有效:

git rev-list --full-history --all | wc -l
这将只输出一个数字。您可以将其别名为

git revno
使事情变得非常方便。为此,请编辑
.git/config
文件并将其添加到:

[alias]
    revno = "!git rev-list --full-history --all | wc -l"
这在Windows上不起作用。我不知道该操作系统的“wc”是什么意思,但编写一个Python脚本来为您计算将是一个多平台的解决方案

编辑:获取两次提交之间的计数:


我正在寻找一个答案,可以显示如何获得两个任意修订之间的提交数量,但没有看到任何结果

git rev-list --count [older-commit]..[newer-commit]

Git shortlog是获取提交详细信息的一种方法:

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

git rev list HEAD--count

git版本列表
: 列出通过遵循给定提交的父链接(在本例中为HEAD)可以访问的提交

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

一个简单的方法是:

 git log --oneline | wc -l

oneline
确保了。

在我们公司,我们从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-是来自it的提交计数。我们需要添加它们

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

expr $(git describe --tags --long | cut -d '-' -f 1) + $(git describe --tags --long | cut -d '-' -f 2)
使用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
。显然,这只在您基于给定
主版本的最多一个分支的情况下才有用


--可以将第一个父级添加到micro编号中,以抑制仅因合并其他分支而产生的某些提交,尽管这可能是不必要的。

像这样使用git shortlog

git shortlog-sn

或创建别名(用于基于ZSH的终端)

#按提交显示贡献者
别名gcall=“git shortlog-sn”

您可以试试

git log --oneline | wc -l
或者列出存储库中参与人员所做的所有提交

git shortlog -s
git-config--global alias.count'rev list--all--count'

如果你登广告
git log --oneline | wc -l
git shortlog -s
git shortlog -s -n
 827  user one
    15  user two
     2  Gest 
alias gc="git rev-list --all --count"      #Or whatever name you wish
git shortlog -ns --group=author --group=trailer:co-authored-by  
git shortlog -s -n  | awk '{ sum += $1; } END { print sum; }' "$@"
  1445  John C
  1398  Tom D
  1376  Chrsitopher P
   166  Justin T
   166  You
  4,551