Hub*_*bro 360 git github line-count
在GitHub存储库中,您可以看到"语言统计信息",它显示用一种语言编写的项目的百分比.但是,它不会显示项目包含的代码行数.通常,我希望能够快速了解项目的规模和复杂性,并且代码行数可以给人留下良好的第一印象.500行代码意味着一个相对简单的项目,100,000行代码意味着一个非常大/复杂的项目.
那么,是否有可能从GitHub存储库中获取用各种语言编写的代码行,最好不要克隆它?
问题" 计算git存储库中的行数"询问如何计算本地Git存储库中的代码行,但是:
总而言之,这对于"快速检查项目规模"来说可能太耗费时间.
Ror*_*ane 260
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).
Ahm*_*ais 150
你可以简单地运行类似的东西
git ls-files | xargs wc -l
Run Code Online (Sandbox Code Playgroud)
这会给你总数→
或者使用此工具→ http://line-count.herokuapp.com/
Art*_*vev 109
Google Chrome浏览器有一个扩展程序 - GLOC适用于公共和私人回购.
计算项目的代码行数:
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的评论.
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上完成此操作.他们已经将建议传递给了Github团队,所以希望将来有可能.如果是这样,我一定会编辑这个答案.
与此同时,Rory O'Kane的回答是一个很好的选择,基于cloc和一个浅的回购克隆.
lov*_*soa 11
我写了一个小的firefox插件,它打印了github项目页面上的代码行数:Github SLOC
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
npm install sloc -g
Run Code Online (Sandbox Code Playgroud)
npm install sloc -g
Run Code Online (Sandbox Code Playgroud)
npm install sloc -g
Run Code Online (Sandbox Code Playgroud)
git clone --depth 1 https://github.com/facebook/react/
Run Code Online (Sandbox Code Playgroud)
sloc ".\react\src" --format cli-table
Run Code Online (Sandbox Code Playgroud)
sloc 支持将输出格式化为 a cli-table、 asjson或csv。正则表达式可用于排除文件和文件夹(有关 npm 的更多信息)。
电源外壳: rm -r -force ".\react\"或在 Mac/Unix 上:rm -rf ".\react\"
执行步骤的截图(cli-table):
sloc 输出(无参数):
还可以使用以下--details选项获取每个文件的详细信息:
sloc ".\react\src" --format cli-table --details
Run Code Online (Sandbox Code Playgroud)
嘿,这一切都简单得可笑......
额外的好处是,如果您不批准 PR 并将其留在原处,那么在您将更改合并到 main 时,统计信息(提交次数、更改的文件和总代码行数)将保持最新. :) 享受。
您可以使用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://github.com/XAMPPRocky/tokei)
Run Code Online (Sandbox Code Playgroud)
默认情况下,徽章将显示存储库的 LoC(代码行),您还可以使用 ?category= 查询字符串为其指定显示不同的类别。它可以是代码、空白、文件、行、注释。
[](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)
打开终端并运行以下命令:
curl -L "https://api.codetabs.com/v1/loc?github=username/reponame"
Run Code Online (Sandbox Code Playgroud)
这里有很多答案,有些过于复杂。这是 2023 年的一个简单方法:
git ls-files > list.txt && cloc --list-file=list.txt
Run Code Online (Sandbox Code Playgroud)
名为 的文本文件list.txt包含 git 存储库中的文件名,然后 cloc 在文件列表上运行,尊重 gitignore。
您需要安装cloc。
请注意,此方法需要您系统上的克隆存储库 - 不完全是原始发布者所要求的。
小智 6
如果您使用Vscode并且首先克隆项目,这会非常简单。只需安装Lines of Code (LOC)Vscode 扩展,然后LineCount: Count Workspace Files从 Command Pallete 运行即可。
该扩展按文件类型显示摘要统计信息,还按每个文件夹输出包含详细信息的结果文件。