我如何获得Git提交计数?

Spl*_*plo 718 git revision build-process

我想得到我的Git存储库的提交数量,有点像SVN版本号.

目标是将其用作唯一的递增构建号.

我目前在Unix/Cygwin/msysGit上喜欢这样:

git log --pretty=format:'' | wc -l
Run Code Online (Sandbox Code Playgroud)

但我觉得这有点像黑客.

有没有更好的方法呢?如果我真的不需要wc甚至是Git 会很酷,所以它可以在裸Windows上工作.只需读取文件或目录结构......

Ben*_*kin 1085

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

git rev-list --count <revision>
Run Code Online (Sandbox Code Playgroud)

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

git rev-list --all --count
Run Code Online (Sandbox Code Playgroud)

我建议不要将它用于构建标识符,但如果必须,最好使用你正在构建的分支的计数.这样,相同的修订版将始终具有相同的编号.如果对所有分支使用计数,则其他分支上的活动可能会更改该数字.

  • `git shortlog | grep -E'^ [] +\w +'| wc -l`如果你想获得总数和`git shortlog | grep -E'^ [^]'`如果你想获得每个贡献者的提交数量. (26认同)
  • @BenAtkin:道歉; 我不打算冒犯,只是事实.关于回复日期的观点.当时,您的解决方案可能是最好的解决方案.但我坚持认为,现在`git rev-list HEAD --count`是一个更好的解决方案. (15认同)
  • 这个解决方案都很hacky(类似于原始问题中给出的`git log --pretty = format:''| wc -l`方法)并且不正确:你可以通过反转匹配来看到这个(`git shortlog | grep - Ev'^ [] +\w +'`)并且看到例如没有消息的提交(即"<none>")不被计算.使用`git rev-list HEAD --count`更简洁,更准确. (14认同)
  • 添加了答案,也适用于旧版本:`git log --oneline | wc -l` (3认同)
  • 谢谢你指出`wc -l`.极简主义FTW.我把它纳入了我的答案. (2认同)

Ray*_*yne 149

git shortlog 是一种方式.

  • TY.在计算范围内的提交时,这对我有用; git shortlog sha1..sha2 (5认同)
  • 提交的数量按提交者分组,不太好.可以在git shortlog中计算行数,但由于某些原因(pager?),这对于没有终端的ssh不起作用.提问者的原始解决方案是最好的!git log --pretty = format:''| wc -l (4认同)
  • 但是,我建议使用`git rev-list HEAD --count`而不是OP中给出的原始方法.在我的测试中,`git log --pretty = format:''| wc -l`是一个人. (4认同)
  • @ctrueden`​​git log --oneline | wc -l`没有关闭(OS X 10.8.5). (3认同)
  • 是的,git Shortlog 的第一行包含提交的数量。问题解决了。 (2认同)

Jak*_*ger 106

git rev-list HEAD --count

git rev-list

git rev-list <commit>:通过跟随给定提交的父链接(在本例中为HEAD)可以访问的列表提交.

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


Ale*_*tau 87

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

git shortlog -s
Run Code Online (Sandbox Code Playgroud)

  • `git shortlog`本身并不能解决*total*提交次数的原始问题(未按作者分组).使用`git rev-list HEAD --count`代替. (9认同)
  • 真棒!你可以按`|排序 排序-n`也是 (4认同)

Bom*_*mbe 53

如果您正在为提交寻找一个唯一且仍然可读的标识符,那么git describe可能就是您的最佳选择.

  • 这可能会起作用,并且比定制的算法更容易使用.+1 (2认同)
  • 我不知道git描述.标签名称和sha1之间的这个小数字就是我正在寻找的.谢谢. (2认同)
  • 看一下GIT-VERSION-GEN脚本及其在git存储库中的使用方法,以及Linux内核源代码中的类似脚本(以及它们在Makefile中的使用方式). (2认同)
  • 是的,那是因为*incremental*ID的*concept*对分布式版本控制系统没有任何意义. (2认同)

Von*_*onC 34

你并不是第一个考虑Git中"修订号"的人,但是' wc'非常危险,因为提交可以被删除或压缩,并重新审视历史.

"版本号"对于Subversion尤为重要,因为在合并的情况下需要它(SVN1.5和1.6在这方面有所改进).

您最终可能会得到一个预提交挂钩,其中包含注释中的修订号,其算法不涉及查找分支的所有历史记录以确定正确的数字.

Bazaar实际上提出了这样一种算法,它可能是你想要做的一个很好的起点.

(正如Bombe的回答所指出的,Git实际上有一个自己的算法,基于最新的标签,加上提交的数量,再加上一些SHA-1密钥).如果适合你,你应该看到(并且赞成)他的答案.


为了说明Aaron的想法,您还可以将Git提交哈希附加到您随应用程序分发的应用程序的"info"文件中.

那样,about box看起来像:

关于盒子

应用程序编号是提交的一部分,但"应用程序"信息"文件"是在打包过程中生成的,有效地将应用程序内部版本号与技术修订版ID相关联.

  • 我已经更新了我的脚本以使用Xcode 3.您可以从http://gist.github.com/208825获取最新版本. (2认同)

dem*_*vil 31

你可以使用:

git shortlog -s -n
Run Code Online (Sandbox Code Playgroud)

结果:

 827  user one
    15  user two
     2  Gest 
Run Code Online (Sandbox Code Playgroud)


Joh*_*zen 21

要将其变为变量,最简单的方法是:

export GIT_REV_COUNT=`git rev-list --all --count`
Run Code Online (Sandbox Code Playgroud)

  • 实际上,`git rev-list`是正确使用的工具,而不是像其他人说的那样`git log`. (5认同)

Jim*_*ane 21

一个简单的方法是:

 git log --oneline | wc -l
Run Code Online (Sandbox Code Playgroud)

oneline 确保.


Sri*_*ula 15

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

git shortlog -s -n
Run Code Online (Sandbox Code Playgroud)

这将给出作者姓名后面的提交数量.-s选项删除作者所做的每个提交的所有提交消息.如果您还想查看提交消息,请删除相同的选项.-n选项用于对整个列表进行排序.希望这可以帮助.

  • `git shortlog`本身并不能解决*total*提交次数的原始问题(未按作者分组).使用`git rev-list HEAD --count`代替. (2认同)

Pan*_*war 13

有几种很酷的方法可以做到这一点 -

  • 第一种方法

git shortlog -s

此命令打印对存储库做出贡献的所有用户的提交计数列表。

956 Pankaj Tanwar
235 The Ninja
540 The Hardcore Geek
664 The Ever Shining Star
984 The Experienced Man
Run Code Online (Sandbox Code Playgroud)

简单地说,要获取总提交数 -

git shortlog -s | grep "Pankaj Tanwar"

它打印 -

956 Pankaj Tanwar
Run Code Online (Sandbox Code Playgroud)
  • 另一种干净又酷的方法是——
git rev-list HEAD --author="Pankaj Tanwar" --count 
Run Code Online (Sandbox Code Playgroud)

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


小智 8

git rev-parse --short HEAD

  • 产生一个散列,而请求一个数字。 (3认同)

Pat*_*otz 7

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


Nuc*_*eon 7

如果您只使用一个分支,例如 master,我认为这会很好用:

git rev-list --full-history --all | wc -l
Run Code Online (Sandbox Code Playgroud)

这只会输出一个数字。您可以将其别名为

git revno
Run Code Online (Sandbox Code Playgroud)

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

[alias]
    revno = "!git rev-list --full-history --all | wc -l"
Run Code Online (Sandbox Code Playgroud)

这在 Windows 上不起作用。我不知道该操作系统的“wc”等价物,但是编写 Python 脚本来为您进行计数将是一个多平台解决方案。

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


我正在寻找一个答案,该答案将显示如何获得两个任意修订之间的提交次数,但没有看到任何提交。

git rev-list --count [older-commit]..[newer-commit]
Run Code Online (Sandbox Code Playgroud)


Fed*_*ldo 7

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

git shortlog -s -n  | awk '{ sum += $1; } END { print sum; }' "$@"
Run Code Online (Sandbox Code Playgroud)

它由两部分组成:

  1. 打印按作者分组的日志总数 ( git shortlog -s -n)

    输出示例

      1445  John C
      1398  Tom D
      1376  Chrsitopher P
       166  Justin T
       166  You
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将每个作者的总提交数(即每行的第一个参数)相加,并将结果打印出来(awk '{ sum += $1; } END { print sum; }' "$@"

    使用与上面相同的例子,它会总结出来1445 + 1398 + 1376 + 166 + 166。因此输出将是:

      4,551
    
    Run Code Online (Sandbox Code Playgroud)