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

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


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

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

总而言之,这对于“快速检查项目规模”来说可能太费时了。


当前回答

嘿,这一切都太简单了……

从第一次提交创建一个新分支 当你想要找到你的统计,从主创建一个新的PR PR将显示更改的行数——当你从第一次提交开始执行PR时,所有的代码都将被算作新行

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

其他回答

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

除非我遗漏了什么,否则从所有贡献者中添加的总行数中减去删除的总行数应该得到repo中代码的总行数。(编辑:事实证明,我还是错过了一些东西。详情请看orbitbot的评论。)

更新:

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

'use strict'; async function countGithub(repo) { const response = await fetch(`https://api.github.com/repos/${repo}/stats/contributors`) const contributors = await response.json(); const lineCounts = contributors.map(contributor => ( contributor.weeks.reduce((lineCount, week) => lineCount + week.a - week.d, 0) )); const lines = lineCounts.reduce((lineTotal, lineCount) => lineTotal + lineCount); window.alert(lines); } countGithub('jquery/jquery'); // or count anything you like

只需将其粘贴到Chrome DevTools代码片段中,更改repo并单击运行。

免责声明(感谢lovasoa):

对这种方法的结果持保留态度,因为对于一些回购(sorich87/bootstrap-tour),它的结果是负值,这可能表明从GitHub的API返回的数据有问题。

更新:

看起来这种计算总行数的方法并不完全可靠。详情请看orbitbot的评论。

Firefox插件Github SLOC

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

将每个文件中行数的输出通过管道进行排序,以按行数组织文件。 Git ls-files | xargs wc -l |sort -n

你可以运行

git ls-files | xargs wc -l

哪一个能告诉你总数

您还可以添加更多的说明。比如只看JavaScript文件。

git ls-files | grep '\.js' | xargs wc -l

或者使用这个方便的小工具→https://line-count.herokuapp.com/

盾牌。IO有一个徽章,可以在这里为您计算所有的行数。下面是一个计算Raycast扩展回购的例子: