我如何得到Git的提交计数?
我想得到我的Git仓库提交的数量,有点像SVN修订版本号。
目标是将其用作唯一的递增内部版本号。
我目前这样做,在Unix / Cygwin / msysGit上:
git log --pretty=format:'' | wc -l
但是我觉得这有点破绽。
有没有更好的方法来做到这一点? 如果我实际上不需要wc
甚至Git,那将会很酷,所以它可以在一个光秃秃的Windows上运行。 只要阅读一个文件或目录结构…
获取修订的提交计数( HEAD
, master
,commit hash):
git rev-list --count <revision>
要获得所有分支机构的提交计数:
git rev-list --all --count
我build议不要使用它作为构build标识符,但是如果你必须的话,最好使用你正在构build的分支的计数。 这样,相同的修订版本将始终具有相同的编号。 如果您使用所有分行的计数,其他分行的活动可能会更改数字。
git shortlog
是一种方法。
git rev-list HEAD --count
git rev-list
git rev-list <commit>
:列出可以通过跟踪来自给定提交(在这种情况下为HEAD )的父链接到达的提交。
--count
:打印一个数字,说明将有多less提交将被列出,并禁止所有其他输出。
这个命令返回提交者分组提交的数量:
git shortlog -s git shortlog -s 14 John lennon 9 Janis Joplin
如果你正在寻找一个独特的,仍然很可读的提交标识符, git描述可能只是你的事情。
你不是第一个想到Git中的“修订号” ,但是“ wc
”是相当危险的,因为commit可以被删除或者压扁,并且历史会被重新审视。
“修订号”对于Subversion来说尤为重要,因为在合并的情况下 (SVN1.5和1.6在这方面已经有所改进)需要它。
你可能会得到一个预先提交的钩子,这个钩子会在注释中包含一个修订版本号, 而不涉及查找分支的所有历史logging来确定正确的编号。
市集实际上提出了这样的algorithm ,这可能是你想要做的一个很好的起点。
(正如Bombe的回答指出的那样,Git实际上有一个自己的algorithm,基于最新的标签,外加提交的数量,加上一点SHA-1密钥)。 你应该看到(并upvote)他的答案,如果它适合你。
为了说明Aaron的想法 ,您还可以将Git提交哈希追加到应用程序的“info”文件中,这个文件将随应用程序一起分发。
那样的话,关于这个盒子就像是:
应用程序编号是提交的一部分,但“应用程序”信息“文件”是在打包过程中生成的,有效地将应用程序的内部版本号与技术修订版本号相关联。
要把它变成一个variables,最简单的方法是:
export GIT_REV_COUNT=`git rev-list --all --count`
Git shortlog是获取提交细节的一种方法:
git shortlog -s -n
这将提供作者姓名之后的提交数量。 -s选项删除作者所做的每个提交的所有提交消息。 如果您希望看到提交消息,则删除相同的选项。 -n选项用于sorting整个列表。 希望这可以帮助。
一个简单的方法是:
git log --oneline | wc -l
oneline
确保。
git rev-parse –short HEAD
有一个很好的帮手脚本,Git人用它来帮助生成一个基于Git描述的有用的版本号。 我将显示脚本并在我的答案中解释如何将当前提交ID包含在Git项目的文件中? 。
在生成过程中生成一个数字并将其写入文件。 每当你发布一个版本,提交该文件的评论“构build147”(或任何内部版本号目前是)。 在正常开发过程中不要提交文件。 通过这种方式,您可以轻松地在Git中构build编号和版本之间的映射。
如果你只是使用一个分支,比如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脚本来为你计数将是一个多平台的解决scheme。
在我们公司,我们从SVN转移到了Git。 缺less修订号码是一个大问题!
做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)
我曾经使用过的是:
git log | grep "^commit" | wc -l
简单,但它的工作。
使用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
。 显然,只有在给定的master
版本中最多只有一个分支的情况下才有用。
--first-parent
可以将--first-parent
添加到微数中,以抑制仅从合并其他分支引起的一些提交,尽pipe这可能是不必要的。
你可以试试
git log --oneline | wc -l
或者列出仓库中贡献人员所做的所有提交
git shortlog -s
git config --global alias.count 'rev-list --all --count'
如果你把这个添加到你的configuration中,你可以参考命令;
git count
像这样使用git shortlog
git shortlog -sn
或者创build一个别名(对于基于ZSH的terminal)
# show contributors by commits alias gcall="git shortlog -sn"