你能从GitHub仓库获取代码行数吗?

843
在 GitHub 存储库中,您可以查看“语言统计信息”,其中显示了项目以某种语言编写的百分比。然而,它并不显示项目包含多少行代码。通常,我想快速了解项目的规模和复杂性,代码行数可以给出一个很好的第一印象。500 行代码意味着相对简单的项目,100,000 行代码意味着非常大/复杂的项目。

那么,是否可以从 GitHub 存储库中获取使用各种语言编写的代码行数,最好不需要克隆存储库?


问题“在git仓库中计算代码行数的数量”询问如何计算本地Git仓库中的代码行数,但是:

  1. 您必须克隆项目,这可能非常庞大。例如,克隆像Wine这样的项目需要很长时间。
  2. 您将计算不一定是代码的文件中的行,例如i13n文件。
  3. 如果您仅计算(例如)Ruby文件,则可能会错过其他语言(如JavaScript)中的大量代码。您必须事先知道项目使用哪些语言。您还必须为项目使用的每种语言重复计数。

总的来说,这对于“快速检查项目规模”来说可能太耗时了。


4
@Schwern: 没有真正考虑过那个。我想是主分支的最新提交。 - Hubro
15
@Abizern:这是关闭问题的一个有效理由吗?我正在试图在指南中找到答案。我的计划是先在 Stack Overflow 上问,如果没有结果,我会询问 Github 客户支持,并将他们的信息发布为这里的答案。 - Hubro
9
@Abizern:请查看论题相关内容。它指出您可以就“程序员通常使用的软件工具”提问。 - Hubro
5
这里有一个网上工具在https://codetabs.com/count-loc/count-loc-online.html,我还没有尝试过它是否好用。 - Tgr
1
事实是,GitHub并没有提供任何API来获取您的GitHub文件的LOC。您可以做的另一件事是,如果您可以将Sonar服务器与GitHub集成,Sonar确实提供了API以获取您的文件的LOC。 - Amit Mishra
显示剩余5条评论
23个回答

13

打开终端并运行以下命令:

curl -L "https://api.codetabs.com/v1/loc?github=username/reponame"

1
不幸的是,这对私有 repos 不起作用。 - tsalaroth
3
无法使用。API对于任何仓库都会响应“永久移动”。 - Magne
@Magne 对我来说仍然有效。请注意,存储库必须是公共的。您可以尝试使用他们的UI(https://codetabs.com/count-loc/count-loc-online.html)以确保。 - ishandutta2007

12

Firefox插件Github SLOC

我编写了一个小型的Firefox插件,在Github项目页面上打印代码行数:Github SLOC


很棒的插件,非常有用!你知道是否可以让它与私有仓库一起工作吗?它似乎只能在公共仓库上显示LOC。 - rococo
1
链接已经失效了,经过手动搜索,很遗憾地发现这个插件不再存在了。 - dCSeven
1
有一个请求,希望将GLOC也适用于Firefox,而开发人员似乎对这个想法持开放态度:https://github.com/artem-solovev/gloc/issues/23 - miyalys
2
@miyalys 现在已经完成了:https://addons.mozilla.org/zh-CN/firefox/addon/gloc/ - Shachaf Zohar

11
npm install sloc -g
git clone --depth 1 https://github.com/vuejs/vue/
sloc ".\vue\src" --format cli-table
rm -rf ".\vue\"

说明和解释

  1. 从npm安装sloc,这是一个命令行工具(需要安装Node.js)。
npm install sloc -g
  1. 克隆浅仓库(相比完整克隆下载速度更快)。
  1. 克隆浅仓库(相比完整克隆下载速度更快)。
git clone --depth 1 https://github.com/facebook/react/
  1. 运行sloc并指定应该分析的路径。
sloc ".\react\src" --format cli-table

sloc支持将输出格式化为cli-tablejsoncsv。可以使用正则表达式来排除文件和文件夹(npm上获取更多信息)。

  1. 删除存储库文件夹(可选)

Powershell:rm -r -force ".\react\" 或Mac/Unix:rm -rf ".\react\"

已执行步骤的截图(cli-table):

sloc output as acli-table

sloc输出(无参数):

sloc output without arguments

还可以使用--details选项获取每个文件的详细信息:

sloc ".\react\src" --format cli-table --details     

这似乎不适用于R文件,如.R或.Rmd。 - jzadra
1
@jzadra 这应该可以工作。R语言已经被记录为受支持的语言 https://www.npmjs.com/package/sloc#supported-languages否则,请在github上创建一个问题 https://github.com/flosse/sloc/issues - Tobi Obeck
你可能也想尝试一下 SCC:https://github.com/boyter/scc - Tobi Obeck

8
如果问题是“能否快速获取github存储库的行数”,则答案是否定的,正如其他答案所述。
但是,如果问题是“您能否快速检查一个项目的规模”,我通常通过查看其大小来评估一个项目。当然,大小将包括所有活动提交的增量,但它是一个很好的指标,因为数量级非常接近。
例如,
“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)


7
将每个文件的行数从输出管道传输到 sort 中,以按行计数方式组织文件。 git ls-files | xargs wc -l | sort -n

即使在底部给我一个总数,这仍然是迄今为止最简单和最快的方法。 - run_the_race

6

如果您正在使用Vscode并且先克隆项目,那么这很容易。只需安装代码行数 (LOC) Vscode扩展,然后从命令面板中运行LineCount: Count Workspace Files

该扩展根据文件类型显示摘要统计信息,并通过每个文件夹输出详细信息的结果文件。


6

这里有很多答案,一些过于复杂。以下是一个简单的方法适用于2023年:

git ls-files > list.txt && cloc --list-file=list.txt

一个名为list.txt的文本文件包含了您的git仓库中的文件名,然后cloc在文件列表上运行,遵循gitignore规则。

您需要安装cloc

请注意,此方法需要在您的系统上克隆仓库 - 这并不完全符合原始帖子的要求。

cloc


原始答案的前提是“不克隆存储库”,即没有本地可用的存储库。您在回答中完全跳过了这一部分,假设存储库已经在本地可用。 - Hubro
是的,我已经做了关于这个的记录。 - BuffMcBigHuge

5
您可以使用ghloc.vercel.app进行计算任何公共Github存储库中的行数。

3

这里提供的答案都没能满足我的需求。我只想使用已有的工具。下面的脚本将使用基本工具:

  • 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 中的“空树”(empty tree)的 ID,它在每个仓库中始终可用。

来源:


3

还有另外一个在线工具可以计算公共和私有存储库的代码行数,无需克隆/下载它们 - https://klock.herokuapp.com/

screenshot


看起来很有前途,但是不太正常的是你必须注册才能使用它。 - Hashim Aziz
3
我认为这是因为它不想超过一个账户的API请求限制,所以它要求每个人登录,这样就算在他们自己的账户中计数。但是,“此应用程序将能够读取和写入所有公共和私有存储库数据。”并不是一个合理的风险来要求人们承担。 - Magne

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