一.前言
我们使用git进行版本控制的过程中,会希望一些文件不要进行提交,那这个时候就可以利用一些方法达到这个目的,这篇文章讨论一下如何使用.gitignore文件来进行忽略的方法。
二.讨论一下.gitignore文件规则
先简单讨论一下常用的.gitignore文件编写规则,其实比较像正则表达式中的一些内容。
- 一行表示一个规则。
- 使用#表示注释。
- 使用*匹配若干字符(0个/一个/多个)。
- 使用?匹配一个字符。
- 使用[]匹配字符列表。
- !表示否定(不忽略)。
- /表示目录。
- **匹配多级目录。
三.具体.gitignore文件写法示例
来看一些.gitignore文件规则写法示例,更多写法可以参考规则进行编写。
#.gitignore
main.exe
#表示忽略所有main.exe文件。
*.exe
#表示忽略所有.exe文件。
/*.exe
#表示忽略当前目录下的所有.exe文件。
/src/*.exe
#表示忽略当前目录下的src目录下所有.exe文件。
!/main.exe
#表示不忽略当前目录下main.exe文件。
/bin
#表示忽略当前.gitignore文件所在同级目录下的bin目录下所有文件。
#如果同级目录下bin不是目录而是文件,会忽略bin文件。
bin/
#表示忽略所有目录下的bin目录下所有文件,比如包括/bin目录下所有文件,/src/bin目录下所有文件。
#如果bin是文件名,不会忽略。
/src/**/bin
#表示忽略当前目录下的src目录下的任意目录下的bin目录下的所有文件,比如src/bin,/src/debug/bin,/src/release/bin,/src/src/release/bin目录下的所有文件。
#如果bin是文件,也会忽略。
四.讨论一下.gitignore文件规则的生效优先级
1.当前目录下的.gitignore文件的生效优先级最高,然后是上级目录,以此类推,优先级高的规则会覆盖优先级低的规则。
2.对于同一个.gitignore文件会按行从上往下进行生效,所以如果多行规则对同一个文件都会影响,则越往下面的一行规则优先级会越高,同样优先级高的规则会覆盖优先级低的规则。
3.注意,这里说的只是git工作区的.gitignore文件的生效优先级,git忽略文件的规则还包括命令行的内容等,而且命令行优先级更高。
五.其他
1.如果文件已经在追踪中,修改.gitignore文件不会对该文件生效。
2.也可以利用其他方式设置忽略规则,比如修改.git/info/exclude文件等等,特点也不一样,感兴趣的话也可以研究一下。