你可以从Github仓库获取代码行数吗?

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

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


这个问题( 统计git仓库中的行数)询问如何计算本地Git仓库中的代码行,但是:

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

总而言之,对于“快速检查项目规模”来说,这可能要花太多的时间。

一个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可能可以与你的软件包pipe理器一起安装,例如,使用Homebrew进行 brew install cloc

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

用法

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

备择scheme

手动运行命令

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

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

语言学家

如果您希望结果完全匹配GitHub的语言百分比,则可以尝试安装Linguist而不是CLOC 。 根据它的README ,你需要gem install linguist ,然后运行linguist 。 我不能得到它的工作( 问题#2223 )。

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

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

更新:

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

 '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)); 

Google Chrome浏览器有一个扩展名 – GLOC 。

全屏 弹出屏幕

目前在Github.com或其API-s上不可用

我已经与客户支持交谈,并确认这不能在github.com上完成。 尽pipe他们已经把这个build议交给了Github团队,希望将来有可能。 如果是这样,我一定会编辑这个答案。

同时, Rory O'Kane的回答是基于cloc和浅回购克隆的一个很好的select。

您可以使用git clone --depth 1 <url>来克隆最新的提交,然后使用git clone --depth 1 <url>使用的相同软件Linguist进行自己的分析。 这是我知道你会得到代码的唯一途径。

另一种select是使用API​​列出项目使用的语言 。 它没有给他们行,但在字节。 例如…

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

虽然拿了一点盐,那个项目包括网站承认的YAML和JSON,但是API没有。

最后,您可以使用代码search来查询哪些文件符合给定的语言。 本示例询问perl5i中的哪些文件是Perl。 https://api.github.com/search/code?q=language:perl+repo:evalEmpire/perl5i 。 它不会给你线条,你必须分别使用每个文件的返回url来请求文件大小。

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

Firefox插件Github SLOC

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

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

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

例如

“docker”项目有多大?

在您的浏览器中,inputapi.github.com/repos/ORG_NAME/PROJECT_NAME即api.github.com/repos/docker/docker

在响应哈希中,您可以find大小属性:

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

这应该给你一个项目的相对规模的想法。 这个数字似乎是以KB为单位的,但是当我在我的电脑上检查它时,它实际上是较小的,尽pipe数量级是一致的。 (161432KB = 161MB,du -s -h docker = 65MB)