算上一个Git仓库的行数算上一个Git仓库的行数(Count number of lines in

2019-05-12 13:29发布

我将如何计算行的总数量存在于一个Git仓库中的所有文件?

git ls-files给我的git的跟踪文件的列表。

我正在寻找一个命令cat所有这些文件。 就像是

git ls-files | [cat all these files] | wc -l

Answer 1:

xargs会做你想要什么:

git ls-files | xargs cat | wc -l

但随着更多的信息,并可能会更好,你可以这样做:

git ls-files | xargs wc -l


Answer 2:

git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

这表明从空树到您当前的工作树的差异。 这恰好计算在当前工作树中的所有行。

为了让数字在当前工作的树,这样做:

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

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



Answer 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与包管理器 -例如, brew install cloc与自制 。

cloc $(git ls-files)往往是在改善cloc . 。 例如,与上面的示例输出git ls-files报告471行代码。 对于同一个项目, cloc . 报道高达456279行(以及需要六分钟运行),因为它搜索在GIT-忽略的依赖性node_modules文件夹。



Answer 4:

我遇到配料问题git ls-files | xargs wc -l git ls-files | xargs wc -l有大量文件,其中线数将得到分块伸到多个打交道时, total线。

从问题以小费为什么在厕所公用生成多行以“总”? ,我发现下面的命令来绕过这个问题:

wc -l $(git ls-files)

或者,如果你想只检查一些文件,如代码:

wc -l $(git ls-files | grep '.*\.cs')



Answer 5:

最好的解决办法,我反正,被埋葬在@ ephemient的答案的评论。 我只是拉了这里,所以它不会被忽视去。 这样做的信贷应该去@FRoZeN(和@ephemient)。

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

返回总在回购的工作目录中的文件和线条,没有任何额外的噪声。 作为奖励,只有源代码进行计数 - 二进制文件被排除在计数。

上面的命令在Linux和OS X.它的跨平台版本

git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

这适用于Windows,太。

根据记录,排除空行的选项,

  • -w / --ignore-all-space
  • -b / --ignore-space-change
  • --ignore-blank-lines
  • --ignore-space-at-eol

当用于不具有任何影响--shortstat 。 空白行进行计数。



Answer 6:

这种工作方式的CLOC 1.68:

cloc --vcs=git



Answer 7:

我玩弄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



Answer 8:

我用的是以下几点:

git grep ^ | wc -l

这种搜索由混帐的正则表达式版本的所有文件^ ,它代表一个行的开头,所以这个命令给出行的总数!



Answer 9:

在github上这个工具https://github.com/flosse/sloc可以给更多的描述方式输出。 它会创建的源代码统计:

  • 物理线路
  • 行代码(源)
  • 有评论线
  • 单行注释
  • 用块注释行
  • 混合与源和注释行
  • 空行


Answer 10:

我这样做:

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

这个工程如果您在资源库中为感兴趣的文件数的所有文本文件。 如果某些被认为是文档等,可以添加排除过滤器。



Answer 11:

: | git mktree | git diff --shortstat --stdin

要么:

git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin


Answer 12:

尝试:

find . -type f -name '*.*' -exec wc -l {} + 

在问题上的目录/目录



文章来源: Count number of lines in a git repository