我想获得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上工作,那就太棒了。只要读取一个文件或目录结构…
当前回答
做一个别名怎么样?
alias gc="git rev-list --all --count" #Or whatever name you wish
其他回答
在构建期间生成一个数字并将其写入文件。每当您发布一个版本时,提交该文件并附上注释“Build 147”(或者当前的版本号)。不要在正常开发期间提交文件。通过这种方式,您可以轻松地在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]
要将其转换为变量,最简单的方法是:
export GIT_REV_COUNT=`git rev-list --all --count`
Git shortlog是获取提交细节的一种方法:
git shortlog -s -n
这将给出提交数和作者名称。s选项删除作者每次提交的所有提交消息。如果还希望看到提交消息,则删除相同的选项。-n选项用于对整个列表进行排序。希望这能有所帮助。
Git shortlog本身并没有解决提交总数的原始问题(没有按作者分组)
这是事实,git rev-list HEAD—count仍然是最简单的答案。
然而,随着Git 2.29(2020年Q4)的出现,“Git shortlog”(man)变得更加精确。 它已经被教导根据预告行内容来分组提交,比如“审阅者:”,“合著者:”,等等。
参见Jeff King (peff)的commit 63d24fa、commit 56d5dde、commit 87abb96、commit f17b0b9、commit 47beb37、commit f0939a0、commit 92338c4(2020年9月27日)和commit 45d93eb(2020年9月25日)。 (由Junio C Hamano—gitster—在commit 2fa8aac中合并,2020年10月4日)
Shortlog:允许指定多个组 署名:杰夫·金
Now that shortlog supports reading from trailers, it can be useful to combine counts from multiple trailers, or between trailers and authors. This can be done manually by post-processing the output from multiple runs, but it's non-trivial to make sure that each name/commit pair is counted only once. This patch teaches shortlog to accept multiple --group options on the command line, and pull data from all of them. That makes it possible to run: git shortlog -ns --group=author --group=trailer:co-authored-by to get a shortlog that counts authors and co-authors equally. The implementation is mostly straightforward. The "group" enum becomes a bitfield, and the trailer key becomes a list. I didn't bother implementing the multi-group semantics for reading from stdin. It would be possible to do, but the existing matching code makes it awkward, and I doubt anybody cares. The duplicate suppression we used for trailers now covers authors and committers as well (though in non-trailer single-group mode we can skip the hash insertion and lookup, since we only see one value per commit). There is one subtlety: we now care about the case when no group bit is set (in which case we default to showing the author). The caller in builtin/log.c needs to be adapted to ask explicitly for authors, rather than relying on shortlog_init(). It would be possible with some gymnastics to make this keep working as-is, but it's not worth it for a single caller.
Git shortlog现在包含在它的手册页中:
——组= <类型> 分组提交基于<类型>。如果没有——group选项为 指定时,默认为author。<type>是其中之一: 作者,提交按作者分组 提交器,提交按提交器分组(与-c相同) 这是——group=committer的别名。
Git短日志现在还包括在它的手册页:
如果多次指定——group,则每次提交都被计数 值(但同样,在该提交中只对每个惟一值执行一次)。为 例如,git shortlog——group=author——group=trailer:co-author -by 包括作者和合著者。