**使用 `github-linguist` 分析 Git 仓库的语言构成与检测策略**

本文档介绍了如何使用 `github-linguist` 命令行工具来分析 Git 仓库的语言构成,并深入了解其语言检测的策略机制。

### 语言分布分析

`github-linguist` 提供了两种主要的分析模式:分析整个 Git 仓库或分析单个文件。

**1. 分析整个 Git 仓库**

* **基础分析**:在仓库根目录下运行 `github-linguist`,可以获得语言按百分比和文件大小的总体分布。
* **指定版本分析**:使用 `--rev REV` 标志,可以将分析目标更改为特定 Git 提交、标签或分支,例如分析 `jekyll` 项目在 `gh-pages` 分支时的语言构成:`github-linguist jekyll --rev origin/gh-pages`。
* **详细文件列表**:使用 `--breakdown` 或 `-b` 标志,除了百分比和总览外,还会列出每个语言包含的具体文件列表。
* **JSON 输出**:使用 `--json` 或 `-j` 标志,可以将所有数据输出为 JSON 格式,方便程序化处理。

**2. 分析单个文件**

可以直接对特定文件运行 `github-linguist`,例如 `github-linguist grammars.yml`,它会输出该文件的类型、MIME 类型、语言等信息。

### 语言检测策略详解

要了解 Linguist 是如何判定文件语言的,可以使用 `--strategies` 或 `-s` 标志。

**1. 整体仓库策略分析**

当在整个仓库级别使用 `--strategies` 标志时,输出会显示每个文件被检测的语言策略。如果文件的语言判定受到 `.gitattributes` 的影响,输出会指明是原始检测方法,还是被 `.gitattributes` 的设置所改变或确认。

**2. 单个文件策略分析**

在单个文件模式下使用 `--strategies` 标志,可以查看该文件的具体检测方法。例如,如果一个文件被 `.gitattributes` 覆盖了语言,输出会明确指出是“overridden by .gitattributes”还是“confirmed by .gitattributes”。

**总结**

* 要查看特定分支或标签(如 `origin/gh-pages`)的语言分布,应使用 `github-linguist <repo> --rev <branch/tag>`。
* 要了解语言判定依据,应使用 `--strategies` 标志。该标志能展示语言是基于文件扩展名(Extension)、文件名(Filename)还是被 `.gitattributes` 覆盖(Overridden by .gitattributes)的结果。

信息来源