我如何计算在一个git存储库中所有文件中出现的总行数?

Git ls-files给了我一个由Git跟踪的文件列表。

我正在找一个命令来隐藏所有这些文件。类似的

git ls-files | [cat all these files] | 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厕所-

其他回答

我是这样做的:

git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l

如果将存储库中的所有文本文件都计算为感兴趣的文件,那么这是可行的。如果其中一些被认为是文档等,则可以添加排除过滤器。

我使用以下方法:

git grep ^ | wc -l

这将搜索由git控制的所有文件的regex ^,它表示一行的开始,所以这个命令给出了总行数!

Xargs会让你把所有文件放在一起,然后把它们传递给wc,就像你问的那样:

git ls-files | xargs cat | wc -l

但是跳过中间的cat会给你更多的信息,可能会更好:

git ls-files | xargs wc -l
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

这显示了从空树到当前工作树的差异。它恰好计算当前工作树中的所有行。

要获得当前工作树中的数字,请执行以下操作:

git diff --shortstat `git hash-object -t tree /dev/null`

它会给你一个字符串,比如1770 files changed, 166776 insertions(+)。

我在玩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厕所-