如何获取git仓库中所有文件的数量?

93

如何获取当前Git存储库中所有文件的数量?

5个回答

172
你可以使用以下命令获取git存储库中所有被跟踪文件的数量:
git ls-files | wc -l

命令分解:

  • git ls-files 命令单独执行会打印出存储库中所有被跟踪的文件列表,每行一个文件。
  • | 操作符将前一个命令的输出导入到接下来的命令中。
  • wc -l 命令调用 word count (wc) 程序。传递 -l 标志要求它返回总行数。

注意: 这只返回存储库中被跟踪的文件计数,即不包括任何忽略的文件或新的未提交的文件。


9
如果您只想统计特定文件扩展名的数量,可以轻松地通过管道命令使用 grep 进行过滤,比如对于 JavaScript (.js) 文件,可以使用类似 git ls-files | grep "\.js$" | wc -l 的命令。 - mnorrish
1
如果提交了1000个文件并推送了,然后所有这些文件都被删除并重新推送,那么git ls-files是否仍会显示那1000个文件?是否有一种方法可以显示所有跟踪的引用,并且还有一种方法可以仅显示当前提交中存在的文件? - infoclogged
2
如果文件名中包含'\n',则以下内容无法正常工作:this won't work if a file has '\n' in its name。需要使用命令git ls-files -z | grep -zc "^" - phuclv
2
作为 mnorrish 建议的获取文件扩展名计数的 grep 的替代方案,可以使用 git ls-files -x *.js -i | wc -l。其中 -x 表示需要排除的文件,而 -i 表示只包括被排除的文件。这种方法适用于 Windows 平台,且输入字符更少 :) - MrRoboto
这个指令可以统计当前分支的文件数量,那是否有一种方法可以统计所有分支中的文件数量呢? - Marco
截至2020年7月,使用git版本2.26.2.windows.1,在Windows 10上的bash v4.4 shell下,无论是git ls-files还是git ls-files -z都无法正常工作。 - Karl

5

在接受的答案基础上,你还可以过滤想要计数的文件类型。

仅计算.json文件

# Will output only json file paths
git ls-files "./*.json" | wc -l

仅计算.c文件

git ls-files "./*.c" | wc -l

一种相当有用的方法来衡量存储库中常见的语言是使用语言占比统计,其主要涉及以下几个步骤:


4
如果您想在不克隆Github库的情况下执行此操作,则可以按照以下步骤进行操作:

svn ls -R https://github.com/exampleproject/branches/master | wc -l

3
这是一个使用PowerShell解决Windows相关问题的方案。
git ls-files | %{ Get-Content -Path $_ } | measure

1
这个答案不起作用,但是这个对我有用:(git ls-files | Measure-Object -line).Lines - Sahin

2
在github仓库视图中,没有办法克隆或下载项目并使用外部工具。
如果您熟悉命令行工具,可以安装git-sizer并针对本地克隆的存储库运行它。它可以告诉您有关存储库的更多信息,甚至超出您的想象。
查看tokei和git-sizer。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接