Git忽略规则终极指南

.gitignore 文件的规则,这是 Git 中控制哪些文件不被版本控制的重要配置文件。


一、基本规则

1. 注释

gitignore 复制代码
# 这是注释,以 # 开头
# 空行会被忽略

2. 匹配文件/目录

gitignore 复制代码
# 忽略单个文件
secret.txt

# 忽略所有 .log 文件
*.log

# 忽略整个目录(加不加 / 有区别,后面讲)
node_modules/

二、通配符规则

符号 含义 示例
* 匹配任意字符(除了 / *.txt 匹配 a.txt,不匹配 dir/b.txt
** 匹配任意字符(包括 / **/*.txt 匹配所有层级的 .txt 文件
? 匹配单个字符 ?.txt 匹配 a.txt,不匹配 ab.txt
[abc] 匹配括号内任一字符 [aeiou] 匹配任意元音字母
[0-9] 匹配范围内字符 file[0-9].txt 匹配 file1.txt ~ file9.txt
gitignore 复制代码
# 示例
*.log           # 忽略所有 log 文件
temp?.txt       # 忽略 temp1.txt, tempA.txt 等
build/**/*.js   # 忽略 build 目录及其子目录下的所有 js 文件

三、路径规则(重点!)

/ 开头的模式 → 从项目根目录开始匹配

gitignore 复制代码
/build          # 只忽略根目录下的 build 目录
                # 不忽略 src/build 或 test/build

/config.json    # 只忽略根目录的 config.json
                # 不忽略 src/config.json

不带 / 的模式 → 匹配任意位置

gitignore 复制代码
build           # 忽略所有名为 build 的文件或目录
                # 包括:/build, /src/build, /test/build 等

config.json     # 忽略所有层级的 config.json

/ 结尾的模式 → 只匹配目录

gitignore 复制代码
build/          # 只匹配名为 build 的目录,不匹配名为 build 的文件
node_modules/   # 只匹配目录,如果有个文件叫 node_modules 则不排除

四、否定规则(取反)

! 开头取消忽略(例外规则)

gitignore 复制代码
# 忽略所有 .txt 文件
*.txt

# 但不忽略 important.txt
!important.txt

# 忽略所有文件
*

# 但不忽略 .gitignore 本身和 src 目录
!.gitignore
!src/

⚠️ 注意:如果父目录被忽略,子文件无法"反忽略"!

gitignore 复制代码
# ❌ 错误示例
node_modules/       # 忽略了整个 node_modules 目录
!node_modules/my-package/   # 这行无效!父目录已被忽略

# ✅ 正确做法:先不忽略目录,再忽略内容,最后反忽略特定文件
node_modules/*
!node_modules/my-package/

五、双星号 ** 的用法

gitignore 复制代码
# 匹配任意层级的目录
**/foo/bar      # 匹配 /foo/bar, /a/foo/bar, /a/b/foo/bar 等

# 匹配以特定名称结尾的目录
abc/**          # 匹配 abc 目录下的所有内容(包括子目录)

# 组合使用
**/temp/        # 忽略任何层级的 temp 目录
a/**/b          # 匹配 a/b, a/x/b, a/x/y/b 等

六、实际常用模板

Node.js 项目

gitignore 复制代码
# 依赖
node_modules/

# 日志
*.log
npm-debug.log*

# 运行时数据
pids/
*.pid
*.seed

# 编译输出
dist/
build/

# 环境变量
.env
.env.local

# IDE
.idea/
.vscode/
*.swp

Python 项目

gitignore 复制代码
# 虚拟环境
venv/
__pycache__/
*.py[cod]

# 分发/打包
dist/
build/
*.egg-info/

# 测试
.pytest_cache/
.coverage

# IDE
.idea/
.vscode/

Java 项目

gitignore 复制代码
# 编译输出
target/
*.class

# IDE
.idea/
*.iml
.classpath
.project
.settings/

# 包文件
*.jar
*.war
*.ear

七、规则优先级总结

复制代码
1. 从文件顶部到底部逐行匹配
2. 后匹配的规则会覆盖先匹配的规则(对于同一文件)
3. 父目录被忽略 → 子文件无法再"反忽略"
4. 感叹号 ! 只能取消前面的忽略规则,不能取消后面的

八、调试技巧

bash 复制代码
# 检查某个文件为什么被忽略/没被忽略
git check-ignore -v filename

# 示例
git check-ignore -v config.json
# 输出:.gitignore:5:config.json  config.json
# 表示:在第5行的规则匹配了该文件

核心要点速记

写法 含义
file 任意位置的 file 文件或目录
/file 根目录下的 file
file/ 任意位置的 file 目录
/file/ 根目录下的 file 目录
*.ext 任意位置的 ext 后缀文件
dir/** dir 目录及其所有内容
!file 不忽略(取反)

记住:/ 开头 = 从根开始,带 / 结尾 = 只匹配目录

相关推荐
网络工程小王2 小时前
【大数据技术详解】——HBase技术(学习笔记)
大数据·hadoop·hdfs·big data
无限进步_3 小时前
深入解析vector:一个完整的C++动态数组实现
c语言·开发语言·c++·windows·git·github·visual studio
Codeking__3 小时前
git常用命令小总结
git
摇滚侠3 小时前
ElasticSearch 是干什么的,从百度搜索、B 站搜索功能、京东搜索功能,淘宝搜索功能,理解 ElasticSearch 实现了什么功能
elasticsearch·百度·dubbo
Cvmax3 小时前
xStocks.fi:DeFi 领域的代币化股票与 ETF 创新
大数据·人工智能·区块链
山川行3 小时前
Git学习笔记:Git进阶操作
笔记·git·vscode·学习·编辑器·visual studio code
小霍同学3 小时前
Git Commit 规范与相关工具
git
fengyehongWorld3 小时前
SourceTree 推送后修改commit message
git·sourcetree
YLXA4 小时前
6. cuda reduce kernel
大数据