我如何计算在一个git存储库中所有文件中出现的总行数?
Git ls-files给了我一个由Git跟踪的文件列表。
我正在找一个命令来隐藏所有这些文件。类似的
git ls-files | [cat all these files] | wc -l
我如何计算在一个git存储库中所有文件中出现的总行数?
Git ls-files给了我一个由Git跟踪的文件列表。
我正在找一个命令来隐藏所有这些文件。类似的
git ls-files | [cat all these files] | wc -l
当前回答
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
这显示了从空树到当前工作树的差异。它恰好计算当前工作树中的所有行。
要获得当前工作树中的数字,请执行以下操作:
git diff --shortstat `git hash-object -t tree /dev/null`
它会给你一个字符串,比如1770 files changed, 166776 insertions(+)。
其他回答
: | git mktree | git diff --shortstat --stdin
Or:
git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin
我是这样做的:
git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l
如果将存储库中的所有文本文件都计算为感兴趣的文件,那么这是可行的。如果其中一些被认为是文档等,则可以添加排除过滤器。
如果你想从某个作者那里获得行数,试试下面的代码:
git ls-files "*.java" | xargs -I{} git blame {} | grep ${your_name} | wc -l
我在玩cmder (http://gooseberrycreative.com/cmder/),我想计算html,css,java和javascript的行数。虽然上面的一些答案是有效的,或者grep中的模式没有-我在这里(https://unix.stackexchange.com/questions/37313/how-do-i-grep-for-multiple-patterns)发现我必须转义它
这就是我现在用的:
git ls-files | grep " \ (html css |。\ |。js |。java \)美元“| xargs厕所-
如果您想要这个计数是因为您想要了解项目的范围,那么您可能更喜欢CLOC(“计算代码行数”)的输出,它按语言给出了重要代码行和不重要代码行的分类。
cloc $(git ls-files)
(这一行相当于git ls-files | xargs cloc。它使用sh的$()命令替换特性。)
样例输出:
20 text files.
20 unique files.
6 files ignored.
http://cloc.sourceforge.net v 1.62 T=0.22 s (62.5 files/s, 2771.2 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Javascript 2 13 111 309
JSON 3 0 0 58
HTML 2 7 12 50
Handlebars 2 0 0 37
CoffeeScript 4 1 4 12
SASS 1 1 1 5
-------------------------------------------------------------------------------
SUM: 14 22 128 471
-------------------------------------------------------------------------------
您必须首先安装CLOC。你可以用你的包管理器安装cloc,例如,用Homebrew安装cloc。
Cloc $(git ls-files)通常是对Cloc ..例如,上面使用git ls-files的示例输出报告了471行代码。对于同一个项目,使用cloc。报告高达456,279行(需要6分钟运行),因为它在git忽略的node_modules文件夹中搜索依赖项。