【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
我如何计算git存储库中所有文件中存在的总行数?
git ls-files
为我提供了git跟踪的文件列表。
我正在寻找一个命令来cat
所有这些文件。 就像是
git ls-files | [cat all these files] | wc -l
#1楼
我遇到了git ls-files | xargs wc -l
批处理问题 git ls-files | xargs wc -l
在处理大量文件时,其中行计数将被分成多个total
。
从问题中获取提示为什么wc实用程序会生成多行“total”? ,我发现以下命令绕过了这个问题:
wc -l $(git ls-files)
或者,如果您只想检查一些文件,例如代码:
wc -l $(git ls-files | grep '.*\\.cs')
#2楼
无论如何,最好的解决方案都埋没在@ ephemient的回答的评论中。 我只是把它拉到这里,以免它被忽视。 这个应该归功于@FRoZeN(和@ephemient)。
git diff --shortstat `git hash-object -t tree /dev/null`
返回repo工作目录中的文件和行总数,没有任何额外的噪音。 作为奖励,只计算源代码 - 从计数器中排除二进制文件。
上面的命令适用于Linux和OS X.它的跨平台版本是
git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
这也适用于Windows。
为了记录,排除空行的选项,
-
-w
/--ignore-all-space
, -
-b
/--ignore-space-change
, -
--ignore-blank-lines
, -
--ignore-space-at-eol
与--shortstat
使用时没有任何效果。 空行被计算在内。
#3楼
如果您想要了解项目的范围,那么您可能更喜欢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进行 brew install cloc
。
cloc $(git ls-files)
通常是对cloc .
的改进cloc .
。 例如,上面带有git ls-files
示例输出报告了471行代码。 对于同一个项目, cloc .
报告高达456,279行(并且需要6分钟才能运行),因为它会搜索Git-ignored node_modules
文件夹中的依赖node_modules
。
#4楼
我正在玩cmder( http://gooseberrycreative.com/cmder/ ),我想计算html,css,java和javascript的行数。 虽然上面的一些答案有效, or
grep中的模式没有 - 我在这里找到了( https://unix.stackexchange.com/questions/37313/how-do-i-grep-for-multiple-patterns )我不得不逃避它
所以这就是我现在使用的:
git ls-files | grep "\\(.html\\|.css\\|.js\\|.java\\)$" | xargs wc -l
#5楼
我这样做了:
git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l
如果您将存储库中的所有文本文件计为感兴趣的文件,则此方法有效。 如果某些被认为是文档等,则可以添加排除过滤器。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3148213