.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
-