在GitHub存储库中,你可以看到“语言统计”,它显示了用某种语言编写的项目的百分比。但是,它不显示项目由多少行代码组成。通常,我想快速了解项目的规模和复杂性,而代码行数可以给人留下良好的第一印象。500行代码意味着一个相对简单的项目,10万行代码意味着一个非常大/复杂的项目。

那么,是否有可能从GitHub存储库中获得以各种语言编写的代码行,最好不克隆它?


“计算git存储库中的行数”问题询问如何计算本地git存储库中的代码行数,但是:

你必须克隆这个项目,这可能是巨大的。例如,克隆Wine这样的项目需要很长时间。 你可以计算文件中不一定是代码的行数,比如i13n文件。 如果您只计算(例如)Ruby文件,那么您可能会错过大量其他语言的代码,比如JavaScript。您必须事先知道项目使用哪些语言。您还必须为项目使用的每种语言重复计数。

总而言之,这对于“快速检查项目规模”来说可能太费时了。


当前回答

目前不可能在Github.com或他们的api

我已经和客户支持谈过,并确认在github.com上不能这样做。不过,他们已经将这一建议传递给了Github团队,所以希望将来能实现。如果是这样,我一定会编辑这个答案。

与此同时,Rory O'Kane的答案是一个基于cloc和浅回购克隆的出色选择。

其他回答

目前不可能在Github.com或他们的api

我已经和客户支持谈过,并确认在github.com上不能这样做。不过,他们已经将这一建议传递给了Github团队,所以希望将来能实现。如果是这样,我一定会编辑这个答案。

与此同时,Rory O'Kane的答案是一个基于cloc和浅回购克隆的出色选择。

如果您转到图表/贡献者页面,您可以看到回购的所有贡献者的列表,以及他们添加和删除了多少行。

除非我遗漏了什么,否则从所有贡献者中添加的总行数中减去删除的总行数应该得到repo中代码的总行数。(编辑:事实证明,我还是错过了一些东西。详情请看orbitbot的评论。)

更新:

这些数据也可以在GitHub的API中找到。所以我写了一个快速脚本来获取数据并进行计算:

'use strict'; async function countGithub(repo) { const response = await fetch(`https://api.github.com/repos/${repo}/stats/contributors`) const contributors = await response.json(); const lineCounts = contributors.map(contributor => ( contributor.weeks.reduce((lineCount, week) => lineCount + week.a - week.d, 0) )); const lines = lineCounts.reduce((lineTotal, lineCount) => lineTotal + lineCount); window.alert(lines); } countGithub('jquery/jquery'); // or count anything you like

只需将其粘贴到Chrome DevTools代码片段中,更改repo并单击运行。

免责声明(感谢lovasoa):

对这种方法的结果持保留态度,因为对于一些回购(sorich87/bootstrap-tour),它的结果是负值,这可能表明从GitHub的API返回的数据有问题。

更新:

看起来这种计算总行数的方法并不完全可靠。详情请看orbitbot的评论。

你可以使用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分别询问文件大小。

你可以使用tokei:

cargo install tokei
git clone --depth 1 https://github.com/XAMPPRocky/tokei
tokei tokei/

输出:

===============================================================================
 Language            Files        Lines         Code     Comments       Blanks
===============================================================================
 BASH                    4           48           30           10            8
 JSON                    1         1430         1430            0            0
 Shell                   1           49           38            1           10
 TOML                    2           78           65            4            9
-------------------------------------------------------------------------------
 Markdown                4         1410            0         1121          289
 |- JSON                 1           41           41            0            0
 |- Rust                 1           47           38            5            4
 |- Shell                1           19           16            0            3
 (Total)                           1517           95         1126          296
-------------------------------------------------------------------------------
 Rust                   19         3750         3123          119          508
 |- Markdown            12          358            5          302           51
 (Total)                           4108         3128          421          559
===============================================================================
 Total                  31         6765         4686         1255          824
===============================================================================

Tokei支持徽章:

数线

[![](https://tokei.rs/b1/github/XAMPPRocky/tokei)](https://github.com/XAMPPRocky/tokei)

默认情况下,徽章将显示回购的LoC(代码行),您也可以指定为它显示一个不同的类别,通过使用?category=查询字符串。它可以是代码、空格、文件、行、注释。

计算文件

[![](https://tokei.rs/b1/github/XAMPPRocky/tokei?category=files)](https://github.com/XAMPPRocky/tokei)

如果问题是“你能否快速获得一个github回购的行数”,答案是否定的,正如其他答案所述。

然而,如果问题是“你能否快速检查项目的规模”,我通常会通过查看项目的规模来评估项目。当然,大小将包括来自所有活动提交的增量,但它是一个很好的度量,因为数量级非常接近。

E.g.

docker项目有多大?

在浏览器中输入api.github.com/repos/ORG_NAME/PROJECT_NAME 即api.github.com/repos/docker/docker

在响应散列中,你可以找到size属性:

{
    ...
    size: 161432,
    ...
}

这应该会让你对项目的相对规模有一个概念。这个数字似乎是以KB为单位的,但当我在电脑上查看它时,它实际上更小,尽管数量级是一致的。(161432KB = 161MB, du -s -h docker = 65MB)