那些在 Github 项目上常见的 dot 文件

1,743 阅读3分钟

这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中。

在实际项目中,往往会有很多文件不需要进行版本管理,例如这几个常见的:

.DS_Store
node_modules/
dist/

.gitattributes

这个文件的作用是可以对项目中的个别文件或目录定义不同的合并策略,让Git知道怎样比较非文本文件,在你提交或签出前让 Git 过滤内容。

但是在Github上却有别的用处。在Github的仓库上,咱们都可以看到项目的描述下方会有一条颜色的粗线,不同的颜色代表不同的语言,例如黄色代表javascript。然后在搜索的时候,所显示的项目类型是由占比例最多的文件来决定,这样偶尔会出现JS的项目类型却是HTML,就只因为HTML的文件比JS的多。

那么,这种情况就可以使用.gitattributes主动告诉Github,咱们项目是啥类型:

 
test/**/*.js linguist-language=Vue

Git相关的可以看这里git-scm

.gitkeep

Git会忽略空的文件夹,但是某些时候我们希望把空的文件夹也添加到版本控制中,也许可以在文件夹里随意放点东西,一旦不为空,那就会被纳入版本控制范围内。但是在空的文件夹里特意放点东西,感觉会很唐突和奇怪。

然后,就有了这个看似合理的文件: .gitkeep,但其并不是Git的规范。

.babelrc

Babel可以说是当今前端领域里非常重要的一个工具,那么以rc(run control)结尾的文件,通常都代表为配置文件。

那.babelrc文件毫无疑问就是对Babel进行配置的咯。

{
  "presets": ["es2015", "stage-2"],
  "plugins": ["transform-runtime"],
  "comments": false
}

.eslintrc

.eslintrc文件是属于ESLint的配置文件,支持JSON和YAML两种语法。

{
  "env": {
    "mocha": true
  },
  "globals": {
    "expect": true,
    "sinon": true
  }
}

.eslintignore

看到ignore这个单词,基本都能猜出这文件时干嘛的,和.gitignore文件一样,都是用来说明需要忽略的文件。

**/*.min.js
**/vendor/*
**/dist/*

.github

在一些比较有名的项目中,基本都能看到这个文件夹。一般这些项目贡献者都比较多,为了更好的管理项目,可以在这文件里进行一下配置,包括issue,pull-request和contribute的指引。.github

例如 ISSUE_TEMPLATE.md:

### OS/Browers version

### Vue version

### Reproduction Link



### Steps to reproduce
### What is Expected?
### What is actually happening?

那么当给该项目提issue时,所打开的文本编辑框中,就会出现以上的模版。

image

.editorconfig

不同的人在开发时可能会选择不同的编辑器,哪怕在同一个团队,有人喜欢Sublime,有人喜欢VScode。喜欢哪个编辑器并无问题,关键是代码的规范能否统一,例如最常说的缩进,到底是2个空格还是直接tab一下。

那么.editorconfig文件的作用就是来统一项目编码规范(需要安装编辑器对应的EditorConfig插件)。

# editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

.travis.yml

.travis.yml也是在有名的Github项目中很常见的一种文件,它是属于Travis Ci的配置说明文件。Travis Ci是一个基于云的持续集成项目,目前已经支持大部分主流语言了,Travis Ci与Github集成非常紧密,官方的集成测试托管只支持Github项目,不过你也可以通过Travis Ci开源项目搭建一套属于自己的方案。

简单地来说,.travis.yml文件的作用就是告诉Travis Ci应该用何种环境或配置条件来测试项目。

例如Node.js的项目:

language: node_js
node_js: 5