Git基础篇(九)——编辑gitignore文件

前言:
  工程目录中有些文件我们并不希望对其进行版本管理,比如工程编译生成的中间文件,个人编辑的某些临时文件等。那么如何让Git知道哪些文件应该版本管理,哪些文件应该忽略呢?这据需要用到.gitignore文件了。

1 .gitignore文件作用

  在需要的目录中(通常放在Git管理的项目根目录),创建一个名为 .gitignore 的文件,以此文件所处的路径为基础,相对路径形式指定Git管理时要管理和忽略的文件或目录。下面详细介绍编辑的语法规则。更详细的用法可查看官方手册 gitignore

注释

  #符号为行注释,其后的内容会被忽略,用来编辑注释信息。注意,注释符号 # 不能放在同一行,书写规则的后面,这会使得规则失效。

1
#Annotation

2 忽略文件或目录

  /符号放在目录名之后,比如忽略工程下的”A”目录及该目录下的所有子目录和文件,忽略”B“目录下的“b.c”的文件,忽略根目录下“main.c”文件,可以这样编辑文件内容。

1
2
3
4
5
6
7
8
#Ignore A/
A/

#Ignore B/b.c
B/b.c

#Ignore main.c
main.c

  注意不要多次一举在前面添加./,这不表示当前路径。

3 不忽略文件或目录

  如果在路径开头加上!符号,则表示不要忽略文件或目录。通过这个符号指定不忽略的作用效果“强”于忽略,组合起来即可实现“忽略某个目录下除了某些指定不忽略的文件或目录以外的所有其他文件和目录”。假设目录结构如下。

1
2
3
/a1.c
/a2.c
/B

  如果版本提交时想忽略根目录下除了“a1.c”以外所有的文件和目录,可以这样写命令。

1
2
#Don't ignore the a.c file
!/a1.c

  如果目录更复杂,某些目录下的子目录或文件不想被忽略时.gitignore文件应该怎么写?如果目录结构为以下形式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
C:.
│ .gitignore
a1.txt
a2.txt

├─A1
│ │ b1.txt
│ │ b2.txt
│ │
│ ├─B1
│ │ c1.txt
│ │ c2.txt
│ │
│ └─B2
c1.txt
c2.txt

└─A2
b1.txt
b2.txt

  若我们希望提交时不要忽略 A1/b1.txt 文件和 A1/B2 目录,可以编辑.gitignore为如下内容。

1
2
3
4
5
6
7
8
9
10
#可以省略。忽略根目录下的所有内容
/*
#但不忽略A1目录
!/A1
#忽略A1目录下的所有内容
/A1/*
#不忽略/A1/b1.txt
!/A1/b1.txt
#不忽略/A1/B2目录
!/A1/B2

  思路要随着目录结构逐渐深入内层,要区分“忽略目录”和“忽略目录内的内容”。比如希望忽略A1目录下除了b1.txt以外的所有目录和文件,那么久应该从顶层目录开始不忽略路径上的目录,此时木能忽略A1目录,因此有 !/A1 ,然后要忽略A1下除了b1.txt以外的所有文件和目录,因此有 /A1/*!/A1/b1.txt

4 通配符

  • *:表示匹配任意字符串;
  • ?:表示匹配任意一个字符;
  • []:表示匹配括号指定范围的一个字符:
    • -:括号内可以使用-指定范围,比如:[0-9][a-z][A-Z]
    • ^:括号内可以使用^指定排除的范围,比如[^0-9][^a-z][^A-Z]