gitignore 规则
gitignore
规则一种被
Git
忽略跟踪文件(或目录)的规则,这种规则对于已被跟踪的文件是无效的。
当然它也提供配置自动加入跟踪的文件(或目录)的规则,但这种用法比较少。
规则
基本规则
- 空行或者以
#
开头的行都会被 Git 忽略。一般空行用于可读性的分隔,#
一般作注释用 - 以斜杠
/
结尾表示忽略目录 - 以
/
开头表示根目录下的文件或目录 - 以叹号
!
表示不忽略(跟踪)匹配到的文件或目录
示例如下:
# 本行为注释
.idea/ # 忽略仓库中所有.idea 目录
/.idea/ # 忽略仓库中根目录下的.idea 目录
/.settings # 忽略仓库中根目录下的 .settings 文件或目录
~'$'*.docx # office 打开时生成的临时文件
!etc/eclipse/.checkstyle # 不忽略 .checkstyle 文件或目录
glob 模式规则
指 shell 使用的简化版正则表达式规则,其如下:
- 以星号
*
通配任意个字符(0-n) - 以问号
?
通配单个字符(1) - 以方括号
[]
包含单个字符的匹配列表
示例如下:
debug?.logt # 忽略 debug?.log 文件或目录,其中 ? 为任意一个字符
debug[0-9].log # 忽略 debug0.log、debug2.log 等,但不忽略 debuga.log 文件
debug[01].log # 仅忽略 debug0.log、debug1.log
debug[!01].log # 不忽略 debug0.log、debug1.log
doc/*.txt # 忽略 doc 目录下一级的所有以 .txt 结尾的文件或目录
doc/**/*.pdf # 忽略 doc 目录下所有的 .pdf 文件或目录
注意
- 以上规则仅适用于未被缓存或加入版本控制的文件
-
gitignore
支持 glob 模式 -
gitignore
是从上到下一行一行匹配,后面的会覆盖前面的
用法
git 中提供 ignore 支持的方式据我了解共有三种,按照效果来分可分为 全局忽略_、_仓库忽略(远程共用) 及 _仓库忽略(本地使用)_。
全局忽略
本地所有仓库中共同使用的忽略规则。
可以通过命令行或直接修改文件的方式进行修改:
- 命令行:直接修改
core.excludesFile
值即可 -
修改配置文件:修改
~/.gitconfig
文件,在[core]
区域添加 excludesfile 属性,如下:[core] excludesFile = ~/.gitignore
注:
-
core.excludesFile
的默认值为~/.config/git/ignore
。
仓库忽略-远程
当前仓库使用,在当前仓库任意目录下创建 .gitignore
文件即可,Git 会通过它提供的规则忽略文件。
注:
- 远程共用的效果需要将
.gitignore
文件加入 Git 的版本管理 -
.gitignore
文件规则存在冲突时,当前目录中的优先于父级目录中的
仓库忽略-本地
当前仓库使用。
修改 $GIT_DIR/info/exclude
文件,该文件规则和 .gitignore
文件一致。
注:
-
$GIT_DIR
为当前仓库中的.git/
目录
命令行式忽略
通过命令行提供忽略规则,根据参数不同,可达到 远程/本地 的效果。
各位如果观察过 $GIT_DIR/info/exclude
文件,可以发现该文件第一行有这么一个命令
git ls-files --others --exclude-from=.git/info/exclude
实际上通过此命令也可以设置忽略规则文件。
总结
以下为个人对各种忽略规则的一般准则吧,各位可以参考参看:
- 命令行形式的,通常不使用,毕竟有以下更简单方便的方式实现。
-
.gitignore
: 当前存储库中有开发人员都要忽略的跟踪文件 -
$GIT_DIR/info/exclude
:单个存储库个人忽略的配置文件,如个人为了更好 debug,开启日志配置等 -
~/.gitconfig
中core.excludesFile
指定的文件:任意情况下用户希望忽略的文件,如IDE配置文件目录(当然
项目中也一般会添加此忽略规则)。
插件
因为个人多数使用 Intellij IDEA,所以只了解 IDEA 下的插件,个人推荐使用 .ignore
。
因为该插件不仅支持 gitignore ,还支持其他类型的 ignore 忽略规则语法高亮,如图
参考地址:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。