我最近在JavaScript和C ++中使用github项目,并注意到github将项目标记为C ++。如果你必须选择一种语言,这可能是正确的名称,因为C ++代码被编译为JavaScript库,但这让我很奇怪...... github如何找出标记每个项目的语言?
答案 0 :(得分:78)
2013年4月更新,nuclearsandwich(GitHub支持团队或“supportocat”):
帮助页面“My repository is marked as the wrong language”提到现在使用linguist library来确定语法突出显示和回购统计信息的文件语言。语言学家将从统计信息excluding certain vendor files and directories中排除某些文件名和路径。
如果您所需的语言没有收到语法高亮显示,您可以向Linguist库添加内容。
(原始答案,2012年10月)
这thread on GitHub support解释了它:
它只是总结每个扩展名的文件大小。最大的一个“胜利”。
我们希望避免打开文件并解析其内容,因为两者都会减慢进程...但这可能是解决此类冲突的唯一方法。
由于这不是100%准确,因此引起了一些补充:
对于猜测错误的情况,我也会投票给一个简单的手动覆盖开关。
注意:Mark Rushakoff中his answer提及(upvoted),从那时起linguist project(2011年6月开源)猜测变得更好了。
你可以看到仍有问题:GitHub Linguist Issues
见here for more details:
答案 1 :(得分:13)
目前,Github的linguist project是用于确定语言统计信息的内容,如this Github blog post(最初询问此问题几个月后出现)所述。
答案 2 :(得分:3)
首先,请知道您可以使用Linguist overrides 覆盖检测到的语言以查找存储库中的文件。
现在,简而言之,
语言学家如何检测语言?
Linguist依次依赖following strategies,并在找到完美匹配后返回语言(返回单一语言的策略)。
Makefile
)。#!/bin/bash
shebang的文件将被归类为Shell。.h
的C ++,C和Objective-C)会被后续策略所改进。^[^#]+:-
for Prolog)。什么是未发布的文档文件?
Linguist将某些文件视为 vendored ,这意味着它们不包含在语言统计信息中。这些包括第三方库,如jQuery,并在vendor.yml
配置文件中定义。您还可以使用Linguist overrides在存储库中提供或取消存档文件。
同样,文档文件在documentation.yml
中定义,可以使用Linguist overrides进行更改。
如何检测生成的文件?
Linguist依靠simple rules来检测生成的文件,同时使用路径和文件内容。生成的文件不计入语言统计信息,也不会显示在github.com上的差异中。
编程和标记语言怎么样?
在语言学家中,每种语言都有一种类型。可以在主配置文件languages.yml
中找到这些类型。统计中只计算编程和标记语言。
答案 3 :(得分:0)
经过一些修补linguist我 注意到了这一点。
对于Shebang的文件, Shebang在确定语言时被考虑但似乎是均匀的 对其他人加权 tokens。 这似乎是一个很大的错误,因为Shebang应该明确地定义 文件的语言。
这可能导致issues 高亮。
答案 4 :(得分:-1)
文件扩展程序是我想到的第一件事。