.gitignore 文件语法介绍
.gitignore 文件的作用
A gitignore file specifies intentionally untracked files that Git should ignore. Files already tracked by Git are not affected; see the NOTES below for details.
.gitignore 文件指定了一组未被跟踪的文件,这些文件应该被 Git 程序忽略(即,git status 时,不再提示这些文件尚未被跟踪)。如果文件已经被 Git 程序跟踪,则这些文件不会受到 .gitignore 的影响。
.gitignore 的文件结构和语法
.gitignore 是一个纯文本文件,文件中的每一行都代表一个匹配模式(pattern)。GIT 从上至下读取文件,后面行的优先级大于前面行。
匹配模式
- 空行:无意义,可以作为分隔行,增加可读性(readability);
- #开头: 注释。注意:- #必须为行的第一个字符。如果行要以- #开头,需要在- #之前插入一个- \,即,- \#;
- 行首空格不会被忽略,因为文件名中可以包含空格;
- 行尾空格会被忽略,如果想包含行尾空格,则需要在每个行尾空格之前插入一个 \;
- !(取反操作): 如果文件被前面的模式排除,但又匹配了- !后面的模式,则该文件将再次被包含进来;
- /(目录分隔符): 目录分隔符可以出现在行首、行中、行尾,- 行首:/foo
- 行中:foo/bar
- 行尾:foo/,
 
- 行首:
- *通配符: 可以匹配任意长度的任意字符串(字符串中不能包含- /);
- **通配符: 可以匹配任意长度的任意字符串(字符串中可以包含- /);
- ?通配符: 可以匹配长度为 1 的任意字符串(字符串中不能包含- /);
- 范围通配符: 如 [a-zA-Z],可以匹配长度为 1 的只包含英文字母的字符串;
- 如果模式匹配了文件夹,也相当于匹配了文件夹的所有文件;
/ 的一些说明
- 
行尾:如果 /出现在行尾,则匹配模式只会匹配文件夹,而不会匹配文件。
 比如,foo会匹配所有名称是foo的文件和文件夹,而foo/只会匹配所有名称是foo的文件夹。
- 
行首和行中:如果 /出现在行首和行中,则匹配模式会以.gitignore所在的目录为基准,对所有的相对路径进行匹配(相较于之前,只看文件或者文件夹的名称)。
 比如/foo, 会匹配foo,但是不会匹配bar/foo。
一些例子
例子一
| 匹配模式 | 说明 | 
|---|---|
| foo.* | 匹配所有以 foo.开头的文件,如,foo.c、foo.java等 | 
| !foo/bar | 不匹配 foo/bar文件或者文件夹 | 
| foo/**/bar | 匹配 foo文件夹下的中以bar开头的文件或者文件夹 | 
例子二
文件夹结构
.
├── foo1
│   └── foo2
│       └── a.txt
└── foo2
    └── b.txt
.gitignore 文件内容(1)
.*
/foo2
git status 输出结果(1)
On branch main
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	foo1/
nothing added to commit but untracked files present (use "git add" to track)
.gitignore 文件内容(2)
.*
foo2
git status 输出结果(2)
On branch main
No commits yet
nothing to commit (create/copy files and use "git add" to track)
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号