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!