Git基础-忽略文件.gitignore的配置详解

1. 忽略文件的需求

在我们的项目中,总有一些文件或者目录不想或者不能被纳入版本控制中。
比如:日志文件、开发工具的配置文件、java中的.class文件等。
这些文件都是针对开发者的,每一个开发者的日志文件、开发工具的配置文件都不一致,
如果纳入版本控制后,会对团队中其他成员的项目造成影响:每次进行代码合并的时候都会产生冲突。

因此,我们应该养成良好的习惯,每个项目中都应该有一个.gitignore文件,来忽略不想被纳入版本控制的文件。

2. .gitignore文件的使用限制

.gitignore的生效时机是:要忽略的文件还没有被纳入版本控制中。
即:如果一个文件已经做过一次提交了,那么,即便是在.gitignore文件中添加此文件进行忽略,也不会起作用!

3. .gitignore的语法描述

1)每一行表示一个匹配规则,空行会被忽略
2)以 # 开头的行表示注释,可以使用反斜杠进行转义
3)空格不匹配任何的文件,可以作为分隔符,可以使用反斜杠进行转义
4)* 表示匹配零个或多个任意字符
5)** 表示匹配任意中间目录;如 :a/**/z 可以匹配 a/z, a/b/z 或者 a/b/c/z;
6)? 表示匹配任意一个字符
7)[abc] 表示匹配任意一个括号中的字符
8)[a-z] 表示匹配任意一个括号中的两个字符的范围之内的字符
9)以斜杠/开始表示目录,且表示根目录;
10)以斜杠/结束的模式表示只匹配文件夹以及该文件路径下的内容,不匹配该文件;
11)如果一个模式不包含斜杠,则它匹配相对于当前.gitignore文件路径的内容,如果该模式不在.gitignore中,则相对于项目根目录
12)! 表示对.gitignore中的模式进行取反;即:取消对应的忽略,继续追踪对应的文件。
13)git对于.ignore配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

4.配置实例

4.1 指定忽略文件

a.txt: 忽略所有目录下面的 a.txt 文件
/a.txt: 仅忽略根目录下面的 a.txt 文件(防止递归忽略所有的 a.txt文件)
/f001/aa.class : 具体忽略 某个目录下面的 某个文件
*.txt: 忽略所有目录下面的以 .txt 结尾的文件
**/*.class: 忽略 任意目录下面的 以 .txt 结尾的文件
f1/**.class:忽略与.gitignore文件同目录下的 f1目录下的 所有以.class结尾的文件
f001/**/*.class:忽略 与 .gitignnore 文件同目录的 f001 目录下面任意级目录下的 以.class结尾的文件

4.2 指定忽略目录

/f001_1/: 忽略根目录下面的f001_1目录
f001_1/ : 忽略 所有的 f001_1目录,/f001_1/,/a/b/f001_1/ 等等
f001_1/* : 忽略 与.gitignore 文件同目录下的 f001_1的目录的所有的内容

5.一个完整的.gitignore文件

# 这是一行注释,不会起作用

# 忽略所有目录下面的a.txt文件
#a.txt

# 忽略根目录下面的a.txt文件
#/a.txt

# 忽略 /f001/aa.class文件
#/f001/aa.class

# 忽略所有目录下面的以 .txt 结尾的文件
#*.txt

# 忽略任意目录下面的*.class 结尾的文件
#**/*.class

# 忽略 与.gitignore 文件同目录的 f001_1 目录下面的 以 .class 结尾的文件
#f001_1/*.class

# 忽略 与 .gitignnore 文件同目录的 f001 目录下面任意级目录下的 以 .class结尾的文件
#f001/**/*.class

# 忽略 根目录下面的f001_1的整个目录
#/f001_1/

# 忽略 f001_1/目录下的所有内容
#f001_1/

# 忽略 与.gitignore 文件同目录的 f001_1 目录下面的所有的内容
f001_1/*

6.完成

Congratulation!
You are one step closer to success!

上一篇:.gitignore 无效


下一篇:Git .gitignore