协慌网

登录 贡献 社区

计算 git 存储库中的行数

如何计算 git 储存库中所有文件中存在的总行数?

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

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

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

答案

xargs将做您想要的:

git ls-files | xargs cat | wc -l

但是,有了更多的信息并且可能会更好,您可以:

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(+)

如果由于要了解项目范围而需要此计数,则可能更喜欢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 行(需要六分钟的时间),因为它会在忽略 Git 的node_modules文件夹中搜索依赖node_modules