.gitignore
文件用于指定 Git 版本控制中需要忽略的文件和目录,避免不必要的文件被跟踪。
基本规则
-
空行与注释:
- 空行:被忽略,用于分隔规则。
- 注释:以
#
开头,例如:
gitignore# 忽略日志文件 *.log
-
忽略文件/目录:
gitignoretemp.txt # 忽略所有 temp.txt文件 build/ # 忽略所有 build 目录
-
通配符:
*
:匹配任意字符(除路径分隔符/
)。
gitignore*.tmp # 忽略所有 .tmp 后缀文件
?
:匹配单个字符。
gitignore??test.txt # 忽略 aatest.txt、abtest.txt 等
[]
:匹配括号内任一字符。
gitignore[abc].txt # 忽略 a.txt、b.txt、c.txt
-
路径分隔符
/
:- 开头
/
:仅匹配项目根目录。
gitignore/config.env # 忽略根目录的 config.env(不忽略 src/config.env)
- 结尾
/
:仅匹配目录(不匹配同名文件)。
gitignoredist/ # 忽略所有 dist 目录(不忽略 dist 文件)
- 开头
-
双星号
**
:- 匹配任意层级目录:
gitignorelogs/**/*.log # 忽略 logs/ 下所有子目录的 .log 文件 **/debug # 忽略所有名为 debug 的目录/文件
进阶规则
-
取反规则
!
:- 在忽略规则中排除特定文件(必须写在忽略规则之后):
gitignore*.js # 忽略所有 .js 文件 !index.js # 不忽略根目录的 index.js
- 注意 :若父目录被忽略,
!
无法生效(如logs/**
被忽略后,!logs/error.log
无效)。
-
目录与文件的区别:
-
规则不包含
/
时,同时匹配文件和目录:gitignorecache # 忽略 cache 文件和 cache/ 目录
-
明确目录时添加
/
后缀:gitignorecache/ # 仅忽略 cache 目录
-
示例解析
gitignore
# 忽略所有 .class 文件
*.class
# 不忽略 target/ 下的 Example.class
!target/Example.class
# 忽略根目录的 .env 文件
/.env
# 忽略 node_modules 目录(任意位置)
node_modules/
# 忽略 docs 目录下所有 .md 文件(除 README.md)
docs/*.md
!docs/README.md
# 忽略 logs/ 及其子目录的所有文件
logs/**
优先级与匹配顺序
- 规则按行从上到下匹配,后面的规则覆盖前面的冲突部分。
- 同一目录可存在多层
.gitignore
文件,子目录规则优先级更高。
注意事项
-
已跟踪文件的处理:
-
.gitignore
对已加入版本控制的文件无效。需先删除跟踪:bashgit rm --cached <file> # 停止跟踪但不删除文件 git commit -m "停止跟踪文件"
-
-
全局忽略配置:
-
创建全局规则(适用于所有项目):
bashgit config --global core.excludesFile ~/.gitignore_global
-