计算git存储库中的行数

不羁岁月 提交于 2019-12-27 16:16:20

【推荐】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

如果您将存储库中的所有文本文件计为感兴趣的文件,则此方法有效。 如果某些被认为是文档等,则可以添加排除过滤器。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!