如何避免生成代码/拷贝文件影响GitHub Languages stats

前言

在GitHub Repository中,右边基本都会有一个名为Languages的Section,展示了该仓库所用语言的占比,而作为一个开发者,GitHub的信息多少能够体现owner的能力和经验,所以会存在通过api统计GitHub信息的需要。
例如:
BreakZero stats
参考:github-readme-stats

但是,有时候我们的仓库中会存在一些copy过来的文件(e.g: jQuery.js)或者是工具生成的代码,而这些的代码通常会比较大从而大大影响我们统计的实际结果。
同样,笔者在Profile中添加了Top Languages的分析,由于Blog这个仓库中使用了theme/生成的文件中存在大量的js文件,导致Top Languages 中javascript排名第一,而笔者对javascript只是了解和看懂的水平,所以统计出来的结果比较不符合实际。
Linguist能帮你避免分析这类文件。

介绍

Linguist is used on GitHub.com to detect blob languages, ignore binary or vendored files, suppress generated files in diffs, and generate language breakdown graphs.

更多请看 linguist

使用

Linguist 能做的东西挺多,本文只根据笔者所遇情况介绍Excluded from stats(从统计中排除)的用法。
只需两步:

  1. 在仓库根目录上创建一个名为.gitattributes的文件
  2. 按照文档将你需要标记的文件目录写入文件中,并使用对应的attribute标识
    例如:
    js/** linguist-vendored
    css/** linguist-vendored
    libs/** linguist-vendored
    更多信息请看 Overrides

问题

如果你是在已存在的仓库中设置,当你提交后,可能发现它并没有效果,因为之前的所有提交并没有得到这些attribute处理文件。
解决也很简单

  1. 首先确保当前没有其他提交,如果有,请先push或隐藏,可以使用命令查看
    git status
  2. 重置
    git rm --cached -r .
    git reset --hard
    重置会让文件使用上定义的attributes

总结

Linguist 不仅在Language统计分析上能有效避免错误结果,同样支持不同语言定义和路径覆盖等功能。在每次创建和保存文件时,git都会根据定义的attributes自动保存文件。

Ending