你能从GitHub存储库中获得代码行数吗?

Hub*_*bro 360 git github line-count

在GitHub存储库中,您可以看到"语言统计信息",它显示用一种语言编写的项目的百分比.但是,它不会显示项目包含的代码行数.通常,我希望能够快速了解​​项目的规模和复杂性,并且代码行数可以给人留下良好的第一印象.500行代码意味着一个相对简单的项目,100,000行代码意味着一个非常大/复杂的项目.

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


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

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

总而言之,这对于"快速检查项目规模"来说可能太耗费时间.

Ror*_*ane 260

一个shell脚本, cloc-git

您可以使用此shell脚本使用一个命令计算远程Git存储库中的行数:

#!/usr/bin/env bash
git clone --depth 1 "$1" temp-linecount-repo &&
  printf "('temp-linecount-repo' will be deleted automatically)\n\n\n" &&
  cloc temp-linecount-repo &&
  rm -rf temp-linecount-repo
Run Code Online (Sandbox Code Playgroud)

安装

此脚本需要安装CLOC("计数代码行").cloc可以与您的包管理器一起安装 - 例如,brew install cloc使用Homebrew.

您可以通过将脚本保存到文件mribeiro/cloc,运行cloc-git,然后将文件移动到chmod +x cloc-git诸如此类的文件夹来安装脚本$PATH.

用法

该脚本采用一个参数,即任何/usr/local/bin将接受的URL .示例是git clone(HTTPS)或https://github.com/evalEmpire/perl5i.git(SSH).您可以通过单击"克隆或下载"从任何GitHub项目页面获取此URL.

示例输出:

$ cloc-git https://github.com/evalEmpire/perl5i.git
Cloning into 'temp-linecount-repo'...
remote: Counting objects: 200, done.
remote: Compressing objects: 100% (182/182), done.
remote: Total 200 (delta 13), reused 158 (delta 9), pack-reused 0
Receiving objects: 100% (200/200), 296.52 KiB | 110.00 KiB/s, done.
Resolving deltas: 100% (13/13), done.
Checking connectivity... done.
('temp-linecount-repo' will be deleted automatically)


     171 text files.
     166 unique files.                                          
      17 files ignored.

http://cloc.sourceforge.net v 1.62  T=1.13 s (134.1 files/s, 9764.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Perl                           149           2795           1425           6382
JSON                             1              0              0            270
YAML                             2              0              0            198
-------------------------------------------------------------------------------
SUM:                           152           2795           1425           6850
-------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

备择方案

手动运行命令

如果您不想打扰保存和安装shell脚本,可以手动运行命令.一个例子:

$ git clone --depth 1 https://github.com/evalEmpire/perl5i.git
$ cloc perl5i
$ rm -rf perl5i
Run Code Online (Sandbox Code Playgroud)

语言学家

如果您希望结果与GitHub的语言百分比完全匹配,您可以尝试安装Linguist而不是CLOC.根据其自述文件,您需要git@github.com:evalEmpire/perl5i.git然后运行gem install linguist.我无法让它工作(问题#2223).

  • @linuxdan我的脚本没有克隆整个回购; 它传递`--depth 1`只下载最近的提交.对于大多数回购,这避免了原始问题对克隆过长时间的关注. (9认同)
  • 好工具,谢谢!可能是这里最好的答案:) (8认同)
  • 指定的原始问题没有克隆回购. (5认同)
  • 伙计,这太棒了!一直想知道,我编码了多少行) (3认同)

Ahm*_*ais 150

你可以简单地运行类似的东西

git ls-files | xargs wc -l
Run Code Online (Sandbox Code Playgroud)

这会给你总数→

代码行

或者使用此工具→ http://line-count.herokuapp.com/

  • 如果你想过滤,例如,Python代码:`git ls-files | grep'\ .py'| xargs wc -l`. (22认同)
  • 对问题的简短回答(使用github查找此编号)是否定的.您的方法是第二个最佳选择,特别是因为我们可以过滤掉我们需要计算的任何文件. (8认同)
  • 这个方法行不通。`xargs wc -l` 不会将整个文件列表传递给单个 `wc` 调用 - 对于大型存储库,它会将文件列表拆分为较小的列表(以避免超过最大命令长度限制),最后一个“ “total” 只会是最后一个 `wc` 的总和。如果向上滚动,您会看到其他“总计”行。来自 `man xargs`:“-n number 设置每次调用实用程序时从标准输入获取的参数的最大数量...number 的当前默认值为 5000。” 因此,如果您的文件超过 5000 个,结果将不正确。 (5认同)
  • 我手动对`wc -l`执行`xargs`所有文件,然后使用`awk`对列进行求和,OMG就这么简单了. (3认同)
  • 嗯,文档是代码的重要组成部分。如果你踢评论,你会在哪里划清界限。包含代码信息(如 params)的注释怎么样,下一行禁用 ESLint 的注释怎么样——在一些代码之后是 80% 注释的行怎么样。看看我要去哪里。 (2认同)
  • 如果你想要总数,你必须 `grep total` 并对它们求和,因为 xargs 可以多次发出命令 (2认同)

Art*_*vev 109

Google Chrome浏览器有一个扩展程序 - GLOC适用于公共和私人回购.

计算项目的代码行数:

  • 项目详细页面
  • 搜索结果页面
  • 趋势页面
  • 等等

一个回购 很多回购

  • @MichailMichailidis感谢您的建议.我会解决它. (4认同)
  • @Taurus我的评论并不意味着CR - 从可用性的角度来看,渐变完成了工作(因为你提到的原因)我的意思是我不是所选颜色的粉丝,但这只是我(主观)意见.干杯:) (4认同)
  • 我想这只是计算行数,而不是代码行数。与 SonarQubes 对 loc 的计数相比,这是 2-3 倍大... (4认同)
  • 虽然它似乎不适用于私人存储库,但它还是投了赞成票 (3认同)
  • @ShihabShahriarKhan 你好。九月底将会发布。您可以订阅此问题 https://github.com/artem-solovev/gloc/issues/104 (3认同)
  • @tech4242 实际上我喜欢渐变,因为它可以更容易地理解页面正在被扩展修改。 (2认同)
  • @tech4242 一个问题,“CR”是什么意思?我查了一下,但“回车”和“版权”没有意义,我将其消化为“批评”。我的拙见,但我再次相信,奇怪的颜色可以很好地表达我提到的内容,但是,我确实同意另一种颜色的选择看起来更有吸引力,并且可能也能表达这一点。 (2认同)
  • @Taurus在我的书中CR = Change Request :)欢呼 (2认同)
  • @hellyale肯定.在几周之内 (2认同)
  • @hellyale 它也适用于私人回购。更新扩展。还有更多新功能可以使用 (2认同)

Lew*_*wis 66

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

除非我遗漏了某些东西,否则从所有贡献者中添加的总行数中减去删除的总行数应该会产生回购中代码行的总数.(编辑:事实证明我毕竟失去了一些东西.看看orbitbot的评论细节.)

更新:

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

'use strict';

//replace jquery/jquery with the repo you're interested in
fetch('https://api.github.com/repos/jquery/jquery/stats/contributors')
    .then(response => response.json())
    .then(contributors => contributors
        .map(contributor => contributor.weeks
            .reduce((lineCount, week) => lineCount + week.a - week.d, 0)))
    .then(lineCounts => lineCounts.reduce((lineTotal, lineCount) => lineTotal + lineCount))
    .then(lines => window.alert(lines));
Run Code Online (Sandbox Code Playgroud)

只需将其粘贴到Chrome DevTools代码段中,即可更改回购并点击"运行".

免责声明(感谢lovasoa):

用这种方法得到一粒盐的结果,因为对于一些repos(sorich87/bootstrap-tour),它会产生负值,这可能表明从GitHub的API返回的数据有问题.

更新:

看起来这种计算总行数的方法并不完全可靠.有关详细信息,请查看orbitbot的评论.

  • @Lewis我认为你忽略了在一次提交中添加/删除的行可以与其他提交相同,当合并分支等时仍然计入相同的总数.另外,对于用户配置文件的Github贡献统计数据仅从默认分支或gh页面计算,因此可能会有类似的提交/行统计信息:https://help.github.com/articles/why -are-my-contributions-not-up-on-my-profile /.另请注意,用户个人资料统计信息仅计算前一年,但我认为图表页面上的提交统计信息是永久性的. (3认同)
  • 使用 code_frequecy API 会更简单。给:```fetch("https://api.github.com/repos/jquery/jquery/stats/code_frequency").then(x=>x.json()).then(x=>alert(x) .reduce((total,changes)=>total+changes[1]+changes[2],0)))``` (2认同)

Sch*_*ern 37

您可以git clone --depth 1 <url>使用Linguist克隆最新的提交,然后使用与Github使用的相同软件进行自己的分析.这是我知道你将获得代码的唯一方法.

另一种选择是使用API​​列出项目使用的语言.它不会以行为单位给出它们,而是以字节为单位.例如...

$ curl https://api.github.com/repos/evalEmpire/perl5i/languages
{
  "Perl": 274835
}
Run Code Online (Sandbox Code Playgroud)

尽管如此,该项目还包括网站承认的YAML和JSON,但API没有.

最后,您可以使用代码搜索来询问哪些文件与给定语言匹配.此示例询问perl5i中的哪些文件是Perl. https://api.github.com/search/code?q=language:perl+repo:evalEmpire/perl5i.它不会给你行,你必须分别使用url为每个文件返回的文件大小.


Hub*_*bro 32

目前无法在Github.com或其API上使用

我已经与客户支持部门进行了交谈,并确认无法在github.com上完成此操作.他们已经将建议传递给了Github团队,所以希望将来有可能.如果是这样,我一定会编辑这个答案.

与此同时,Rory O'Kane的回答是一个很好的选择,基于cloc和一个浅的回购克隆.

  • 不是直接的,但他们的[Statistics API](https://developer.github.com/v3/repos/statistics/)拥有您自己计算所需的所有数据.请参阅下面的[我的回答](http://stackoverflow.com/a/32154303/2220891)以获取执行此操作的快速脚本. (2认同)

Kar*_*538 21

从@Tgr 的评论来看,有一个在线工具:https : //codetabs.com/count-loc/count-loc-online.html

strimzi/strimzi-kafka-operator 存储库的 LOC 计数示例


lov*_*soa 11

Firefox附加组件Github SLOC

我写了一个小的firefox插件,它打印了github项目页面上的代码行数:Github SLOC

  • @miyalys现在已经完成了:https://addons.mozilla.org/en-US/firefox/addon/gloc/ (2认同)

Yi *_*Kai 11

您可以使用GitHub API获取类似以下函数的sloc

function getSloc(repo, tries) {

    //repo is the repo's path
    if (!repo) {
        return Promise.reject(new Error("No repo provided"));
    }

    //GitHub's API may return an empty object the first time it is accessed
    //We can try several times then stop
    if (tries === 0) {
        return Promise.reject(new Error("Too many tries"));
    }

    let url = "https://api.github.com/repos" + repo + "/stats/code_frequency";

    return fetch(url)
        .then(x => x.json())
        .then(x => x.reduce((total, changes) => total + changes[1] + changes[2], 0))
        .catch(err => getSloc(repo, tries - 1));
}
Run Code Online (Sandbox Code Playgroud)

我个人做了一个chrome扩展,它显示了github项目列表和项目详细信息页面上的SLOC数量.您还可以设置个人访问令牌以访问私有存储库并绕过api速率限制.

您可以从这里下载https://chrome.google.com/webstore/detail/github-sloc/fkjjjamhihnjmihibcmdnianbcbccpnn

源代码可在此处获得https://github.com/martianyi/github-sloc


Tob*_*eck 9

npm install sloc -g
Run Code Online (Sandbox Code Playgroud)
npm install sloc -g
Run Code Online (Sandbox Code Playgroud)

说明和说明

  1. 从命令行工具npm安装sloc(需要安装Node.js)。
npm install sloc -g
Run Code Online (Sandbox Code Playgroud)
  1. 克隆浅存储库(下载速度比完整克隆快)。
git clone --depth 1 https://github.com/facebook/react/
Run Code Online (Sandbox Code Playgroud)
  1. 运行 sloc并指定应分析的路径。
sloc ".\react\src" --format cli-table
Run Code Online (Sandbox Code Playgroud)

sloc 支持将输出格式化为 a cli-table、 asjsoncsv。正则表达式可用于排除文件和文件夹(有关 npm 的更多信息)。

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

电源外壳: rm -r -force ".\react\"或在 Mac/Unix 上:rm -rf ".\react\"

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

sloc 输出为 acli-table

sloc 输出(无参数):

不带参数的 sloc 输出

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

sloc ".\react\src" --format cli-table --details     
Run Code Online (Sandbox Code Playgroud)


小智 9

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


Pau*_*uer 8

嘿,这一切都简单得可笑......

  1. 从您的第一次提交创建一个新分支
  2. 当你想找出你的统计数据时,从 main 创建一个新的 PR
  3. PR 将向您显示更改的行数 - 当您从第一次提交开始执行 PR 时,您的所有代码都将被视为新行

额外的好处是,如果您不批准 PR 并将其留在原处,那么在您将更改合并到 main 时,统计信息(提交次数、更改的文件和总代码行数)将保持最新. :) 享受。

在此处输入图片说明

  • 如果您可以忽略第一次提交,那么这是一种快速检查的好方法。+1 (2认同)
  • 如果您向后执行此操作并打开 PR 删除所有代码,则删除的行数将是项目中的总行数(减去忽略的文件)。只是帮自己一个忙,不要合并它。 (2认同)

Gor*_*rka 8

您可以使用tokei

cargo install tokei
git clone --depth 1 https://github.com/XAMPPRocky/tokei
tokei tokei/
Run Code Online (Sandbox Code Playgroud)

输出:

===============================================================================
 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
===============================================================================
Run Code Online (Sandbox Code Playgroud)

Tokei 支持徽章:

计数线

[![](https://tokei.rs/b1/github/XAMPPRocky/tokei)](https://github.com/XAMPPRocky/tokei)
Run Code Online (Sandbox Code Playgroud)

默认情况下,徽章将显示存储库的 LoC(代码行),您还可以使用 ?category= 查询字符串为其指定显示不同的类别。它可以是代码、空白、文件、行、注释。

计数文件

[![](https://tokei.rs/b1/github/XAMPPRocky/tokei?category=files)](https://github.com/XAMPPRocky/tokei)
Run Code Online (Sandbox Code Playgroud)


小智 7

如果问题是"你能快速获得github回购的数量",那么答案就不是其他答案所说明的.

但是,如果问题是"您能否快速检查项目的SCALE",我通常会通过查看项目的大小来衡量项目.当然,大小将包括来自所有活动提交的增量,但它是一个很好的度量,因为数量级非常接近.

例如

"码头工程"项目有多大?

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

在响应哈希中,您可以找到size属性:

{
    ...
    size: 161432,
    ...
}
Run Code Online (Sandbox Code Playgroud)

这应该让您了解项目的相对规模.这个数字似乎是以KB为单位,但是当我在计算机上检查它时,它实际上更小,即使数量级是一致的.(161432KB = 161MB,du -s -h docker = 65MB)


ish*_*007 7

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

curl -L "https://api.codetabs.com/v1/loc?github=username/reponame"
Run Code Online (Sandbox Code Playgroud)

  • 不再起作用了。对于任何存储库,API 都会以“永久移动”作为响应。 (3认同)

Buf*_*uge 7

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

git ls-files > list.txt && cloc --list-file=list.txt
Run Code Online (Sandbox Code Playgroud)

名为 的文本文件list.txt包含 git 存储库中的文件名,然后 cloc 在文件列表上运行,尊重 gitignore。

您需要安装cloc

请注意,此方法需要您系统上的克隆存储库 - 不完全是原始发布者所要求的。

克洛克


小智 6

将每个文件sort中行数的输出通过管道传输到以按行数组织文件。 git ls-files | xargs wc -l |sort -n


小智 6

如果您使用Vscode并且首先克隆项目,这会非常简单。只需安装Lines of Code (LOC)Vscode 扩展,然后LineCount: Count Workspace Files从 Command Pallete 运行即可。

该扩展按文件类型显示摘要统计信息,还按每个文件夹输出包含详细信息的结果文件。