在GitHub存储库中,你可以看到“语言统计”,它显示了用某种语言编写的项目的百分比。但是,它不显示项目由多少行代码组成。通常,我想快速了解项目的规模和复杂性,而代码行数可以给人留下良好的第一印象。500行代码意味着一个相对简单的项目,10万行代码意味着一个非常大/复杂的项目。
那么,是否有可能从GitHub存储库中获得以各种语言编写的代码行,最好不克隆它?
“计算git存储库中的行数”问题询问如何计算本地git存储库中的代码行数,但是:
你必须克隆这个项目,这可能是巨大的。例如,克隆Wine这样的项目需要很长时间。
你可以计算文件中不一定是代码的行数,比如i13n文件。
如果您只计算(例如)Ruby文件,那么您可能会错过大量其他语言的代码,比如JavaScript。您必须事先知道项目使用哪些语言。您还必须为项目使用的每种语言重复计数。
总而言之,这对于“快速检查项目规模”来说可能太费时了。
这里的答案没有一个符合我的要求。我只想使用现有的实用程序。下面的脚本将使用基本的实用程序:
Git
GNU或BSD awk
GNU或BSD sed
Bash
获取添加到存储库的总行数(从添加的行中减去删除的行)。
#!/bin/bash
git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD | \
sed 's/[^0-9,]*//g' | \
awk -F, '!($2 > 0) {$2="0"};!($3 > 0) {$3="0"}; {print $2-$3}'
获取已知源代码的指定文件类型(例如*.py文件或添加更多扩展名等)筛选的代码行。
#!/bin/bash
git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD -- *.{py,java,js} | \
sed 's/[^0-9,]*//g' | \
awk -F, '!($2 > 0) {$2="0"};!($3 > 0) {$3="0"}; {print $2-$3}'
4b825dc642cb6eb9a060e54bf8d69288fbee4904是Git中“空树”的id,它在每个存储库中始终可用。
来源:
我自己的脚本
如何获得Git差异的第一次提交?
有没有办法让git显示行增加,行改变和行删除?
npm install sloc -g
git clone --depth 1 https://github.com/vuejs/vue/
sloc ".\vue\src" --format cli-table
rm -rf ".\vue\"
说明及说明
从npm安装sloc,一个命令行工具(需要安装Node.js)。
npm install sloc -g
克隆浅库(下载速度比完整克隆快)。
git clone --depth 1 https://github.com/facebook/react/
运行sloc并指定要分析的路径。
sloc ".\react\src" --format cli-table
Sloc支持将输出格式化为cli-table、json或csv。正则表达式可以用来排除文件和文件夹(更多关于npm的信息)。
删除存储库文件夹(可选)
Powershell: rm -r -force "。\react\"或Mac/Unix: rm -rf ".\react\"
执行步骤的截图(cli-table):
Sloc输出(无参数):
使用——details选项也可以获取每个文件的详细信息:
sloc ".\react\src" --format cli-table --details
你可以使用git clone—depth 1 <url>克隆最新的提交,然后使用Github使用的相同软件Linguist执行自己的分析。这是我知道你能得到代码行数的唯一方法。
另一种选择是使用API列出项目使用的语言。不是以行为单位,而是以字节为单位。例如……
$ curl https://api.github.com/repos/evalEmpire/perl5i/languages
{
"Perl": 274835
}
虽然这是有保留地,但该项目包括YAML和JSON,这是网站承认的,但API不承认。
最后,您可以使用代码搜索来询问哪些文件与给定的语言匹配。这个例子询问perl5i中的哪些文件是Perl文件。https://api.github.com/search/code?q=language: perl +回购:evalEmpire / perl5i。它不会为您提供行,您必须使用每个文件返回的url分别询问文件大小。