github如何找出项目的语言?

Jus*_*ier 79 github github-linguist

我最近在JavaScript和C++中开发了一个github项目,并注意到github将项目标记为C++.如果你必须选择一种语言,这可能是正确的名称,因为C++代码被编译为JavaScript库,但这让我想知道... github如何找出标记每个项目的语言?

Von*_*onC 79

2013年4月更新,由nuclearsandwich(GitHub支持团队或"supportocat"):

如果您所需的语言没有收到语法高亮显示,您可以为Linguist库添加它.


(原始答案,2012年10月)

GitHub支持上的这个帖子解释了它:

它只是总结每个扩展的文件大小.最大的一个"胜利".

我们希望避免打开文件并解析其内容,因为两者都会减慢进程...但这可能是解决此类冲突的唯一方法.

由于这不是100%准确,这导致一些添加:

对于猜测错误的情况,我也会投票给一个简单的手动覆盖开关.


注意:正如Mark Rushakoff他的回答(upvoted)中提到的那样,从那时起,语言学家项目(2011年6月开源)的猜测变得更好了.
你可以看到仍有问题:GitHub Linguist问题.
请参见此处了解详细信息:

一旦检测到语言,它就会传递给Albino,这是一个Pygments包装器,可以实现语法高亮显示.

您可以在.gitattributes文件中添加语言指令.

  • 谢谢(你的)信息.我想仍然无法手动修改语言. (2认同)

Mar*_*off 13

目前,Github的语言学家项目用于确定语言统计,如本Github博客文章(最初提出此问题几个月后出版)中所述.


pch*_*gno 5

首先,要知道您可以使用Linguist overrides覆盖为存储库中的文件检测到语言

现在,简而言之,

  1. 每个存储库都使用语言统计中的第一种语言进行标记。
  2. 语言统计计算每种检测到的编程或标记语言的文件总大小供应商、文档和生成的文件不计算在内。
  3. 每个文件的语言由开源项目Linguist 检测

Linguist 如何检测语言?

语言学家依序依赖以下策略,并在找到完美匹配后立即返回该语言(返回单一语言的策略)。

  1. 寻找Emacs 和 Vim 模式
  2. 已知文件名。一些文件名与特定语言相关联(想想Makefile)。
  3. 寻找一个shebang。带有#!/bin/bashshebang的文件将被归类为 Shell。
  4. 已知的文件扩展名。语言有一组与之相关的扩展。然而,这种策略存在很多冲突。相互矛盾的结果(想想 C++、C 和 Objective-C for .h)由后续策略改进。
  5. 一组启发式规则。他们通常依赖于文件内容上的正则表达式来尝试识别语言(例如,^[^#]+:-对于 Prolog)。
  6. 样本文件上训练的朴素贝叶斯分类。最后一个策略,最低准确率。贝叶斯分类器总是以语言的子集作为输入;它并不意味着对所有语言进行分类。返回分类器找到的最佳匹配。

什么是非供应商和文档文件?

语言学家将某些文件视为vendored,这意味着它们不包含在语言统计数据中。这些包括第三方库,如 jQuery,并在vendor.yml配置文件中定义。您还可以使用语言学家覆盖在您的存储库中供应商或取消供应商文件。

同样,文档文件在 中定义documentation.yml并可使用语言学家覆盖进行更改。

如何检测生成的文件?

语言学家依靠简单的规则来检测生成的文件,同时使用文件的路径和内容。生成的文件不计入语言统计数据,也不会显示在 github.com 上的差异中。

编程和标记语言呢?

在语言学家中,每种语言都有一个类型。这些类型可以在主配置文件中找到,languages.yml. 统计中只计算编程和标记语言。