作用
.gitignore
文件用来指点被需要被忽略的文件或文件夹
但是已经在远程仓库中的文件,是无法通过 .gitignore
来忽略的。
种类
本地.gitignore
文件
- 本地
.gitignore
文件通常放在仓库的根目录中。但是你可以在仓库的不同子目录中创建多个.gitignore
文件。 .gitignore
文件中的模式相对于文件所在目录匹配。在子目录中的文件中定义的模式优先于高于根目录中的模式。
个人忽略规则
在.git/info/exclude
文件中配置特定于本地仓库且不应分发到其他仓库的模式。例如,你可以使用此文件.idea
中生成的文件。
全局.gitignore
Git还允许你创建全局.gitignore
文件,你可以为本地系统上的每个Git仓库定义忽略规则。该文件可以命名为任意名称,并存储在任何位置。保存此文件的最常见位置是主目录。你必须手动创建文件并配置Git使用它。
例如,要将 ~/.gitignore_global
设置为全局Git忽略文件,你可以执行以下操作。
首先创建文件:
touch ~/.gitignore_global
将文件添加到Git配置:
git config --global core.excludesfile ~/.gitignore_global
全局规则对于忽略带有敏感信息或已编译的可执行文件等文件特别适合。
使用模式
好好研究了一下gitignore的语法,知道了.gitignore
文件过滤有两种模式:开放模式和保守模式。
开放模式
开放模式负责设置过滤哪些文件和文件夹
例如:
/target/
#表示项目根目录下的target文件夹里面所有的内容都会被过滤,不被跟踪
.classpath
#表示项目根目录下的.classpath文件会被过滤,不被跟踪
保守模式
保守模式负责设置哪些文件不被过滤
例如:
!/target/*.h 表示target文件夹目录下所有的.h文件将被跟踪
匹配规则:从上到下
gitignore是从上到下逐行匹配的,因此.gitignore文件的编写原则就是:先编写开放模式,在编写保守模式,要不然,开放模式的规则会把保守模式的规则给覆盖了。
例子
下面附上我的 .gitignore
文件的示例:
/*
!.gitignore
!/posts/
只跟踪版本库中的.gitignore文件和posts目录。这里需要注意的是:
一定是/*而不是*,/*表示当前目录下的所有文件,而不是所有文件*
语法
注释
例如 # Here is comment.
通配符及其他符号
可以使用通配符及其他符号来指定复杂条件的文件,如下:
*.log
day_1?.txt
hello[0-9].txt
*
表示匹配任意字符;?
表示匹配一个字符;[]
表示匹配中括号内的单个字符:- 可以使用
-
来表示连贯的字符,比如0-9
,a-z
,A-Z
等,[0-9]
表示匹配从0到9的单个字符。 - 可以使用
^
来表示除外,比如[^0-9]
表示除0到9之外的单个字符。
- 可以使用
忽略
文件
./test.txt
上述语句表示忽略当前目录下的 test.txt
文件
文件夹
./test_folder/
上述语句表示忽略当前目录的test_folder
子目录
不忽略[2]
就在忽略语法的基础上,在最前方补上 !
[1]
这边有几个注意点:
在已忽略文件夹中不忽略指定文件夹:
/libs/* !/libs/extend/
在已忽略文件夹中不忽略指定文件
/libs/* !/libs/extend/fastjson.jar