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

时间:2014-11-12 07:26:48

标签: git github line-count

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

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


问题“Count number of lines in a git repository”询问如何计算本地Git存储库中的代码行,但是:

  1. 您必须克隆项目,这可能是巨大的。例如,克隆像Wine这样的项目需要很长时间。
  2. 您可以计算文件中不一定是代码的行,例如i13n文件。
  3. 如果你只计算 (例如)Ruby文件,你可能会错过其他语言的大量代码,比如JavaScript。您必须事先知道项目使用的语言。您还必须重复项目使用的每种语言的计数。
  4. 总而言之,这对于“快速检查项目规模”而言可能耗费时间过长。

16 个答案:

答案 0 :(得分:227)

一个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

安装

此脚本需要安装CLOC(“计算代码行数”)。 cloc可能与您的软件包管理器一起安装 - 例如,brew install clocHomebrew一起安装。

您可以通过将代码保存到运行cloc-git的文件chmod +x cloc-git,然后将文件移动到$PATH中的文件夹(例如/usr/local/bin)来安装脚本。

用法

该脚本采用一个参数,即git clone将接受的任何URL。示例包括https://github.com/evalEmpire/perl5i.git(HTTPS)或git@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
-------------------------------------------------------------------------------

替代

手动运行命令

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

$ git clone --depth 1 https://github.com/evalEmpire/perl5i.git
$ cloc perl5i
$ rm -rf perl5i

语言学家

如果您希望结果与GitHub的语言百分比完全匹配,可以尝试安装Linguist而不是CLOC。根据{{​​3}},您需要gem install linguist,然后运行linguist。我无法让它工作(its README)。

答案 1 :(得分:92)

Google Chrome浏览器的扩展程序 - GLOC适用于公共和私人回购。

计算项目代码行数:

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

One repo Many repos

答案 2 :(得分:86)

  

您可以简单地运行类似

的内容
git ls-files | xargs wc -l

将为您提供总计数→

lines of code

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

答案 3 :(得分:62)

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

除非我遗漏了某些内容,否则从所有贡献者中添加的总行数中减去删除的行总数应该会产生回购中的代码行总数。 (编辑:事实证明我毕竟失去了一些东西。详情请看orbitbot's comment。)

更新:

此数据也可在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));

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

免责声明(感谢lovasoa):

使用这种方法的结果,因为对于某些repos(sorich87 / bootstrap-tour),它会导致负值,这可能表明从GitHub的API返回的数据有问题。

更新:

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

答案 4 :(得分:36)

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

另一个选择是use the API to list the languages the project uses。它不以行为单位给出它们,而是以字节为单位。例如......

$ curl https://api.github.com/repos/evalEmpire/perl5i/languages
{
  "Perl": 274835
}

尽管如此,那个项目includes YAML and JSON which the web site acknowledges,但API没有。

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

答案 5 :(得分:31)

目前无法在Github.com或其API-s

上使用

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

与此同时,Rory O'Kane's answer是基于cloc和浅层回购克隆的绝佳选择。

答案 6 :(得分:12)

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

LOC counting example for strimzi/strimzi-kafka-operator repository

答案 7 :(得分: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));
}

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

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

此处提供源代码https://github.com/martianyi/github-sloc

答案 8 :(得分:10)

Firefox附加组件 Github SLOC

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

答案 9 :(得分:8)

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

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

E.g。

“码头工程”项目有多大?

在浏览器中输入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)

答案 10 :(得分:4)

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

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

答案 11 :(得分:4)

嘿,这一切都非常简单...

  1. 从第一次提交创建新分支
  2. 要查找统计信息时,请从main创建新的PR
  3. PR将向您显示已更改的行数-当您从第一次提交开始执行PR时,所有代码都将被计为新行

另外的好处是,如果您不批准PR而只是将其保留在原位,则统计信息(提交数,文件更改和代码总行数)在合并时将保持最新变成主要。 :)享受。

enter image description here

答案 12 :(得分:4)

您可以使用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)

答案 13 :(得分:3)

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

答案 14 :(得分:1)

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

screenshot

答案 15 :(得分:0)

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. 克隆浅层存储库(下载速度比完整克隆要快)。
git clone --depth 1 https://github.com/facebook/react/
  1. 运行sloc 并指定应分析的路径。
sloc ".\react\src" --format cli-table

sloc支持将输出格式化为cli-tablejsoncsv。正则表达式可用于排除文件和文件夹(Further information on npm)。

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

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

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

sloc output as acli-table

sloc输出(无参数):

sloc output without arguments