Git 的特殊文件
.gitignore
配置忽略的文件或目录
.gitattribute
.gitattribute 可以为每个目录定义想要的属性,同时也支持匹配方式来设定一组目录。一个简单的示例:
1 | a* foo !bar -baz |
gitattributes 文件存储路径
- 仓库
$GIT_DIR/info/attributes- 根目录
- 子目录
- 用户全局路径:
$HOME/.config/git/gitattributes
也可以通过配置项core.attributesFile配置文件路径,参考 git-config。 - 系统路径:/etc/gitattributes
定义 gitattributes ,除了 .gitattribute 文件,也可以是 $GIT_DIR/info/attributes。
.gitattribute 格式非常简单,每一行定义一个或一组属性,中间使用空格作为分隔符:
1 | pattern attr1 attr2 ... |
开头、结尾的空格都会忽略,(
#)开头的行也会被忽略,双引号(")开头的pattern使用 C 语言风格。后一行的属性会覆盖前面的属性。
每个路径的属性都有如下状态:
- Set
设置属性为true。 - Unset
设置该属性为false。 - 设置成某个值
- Unspecified
gitattributes 支持的属性有:
路径的匹配规则和.gitignore几乎是一样的。
.gitattribute 的优先级
.gitattribute 的优先级由高到低分别是:
$GIT_DIR/info/attributes- 路径下的
.gitattribute - 上级目录下的
.gitattribute - 更上级目录的
.gitattribute - 根目录下的
.gitattribute - 全局的
.gitattribute - 系统的
.gitattribute
比如存在如下文件:
1 | # 系统 |
那优先级分别是 #3 > #6 > #5 > #4 > #2 > #1。
通过 git check-attr 查看 .gitattribute文件内容信息,命令参考 git check-attr。
.gitkeep
了解 git 底层原理的人应该比较清楚,git 无法追踪一个空的文件夹,当用户需要追踪(track)一个空的文件夹的时候,按照惯例,大家会把一个称为 .gitkeep 的文件放在这些文件夹里。
.gitmodules
git 子仓库(submodules)。
.git/description
.git/description 文件用来存储仓库名称以及仓库的描述信息。默认的值为:
1 | Unnamed repository; edit this file 'description' to name the repository. |
也可以改成类似如下的值:
1 | git-inside This is git-inside |
有些Git 工具(比如 GitWeb )通过读取该文件来获取仓库名称以及仓库的说明信息。git hooks 也会读取 .git/description 来获取仓库名称。