.gitignore 忽略文件写法大全:不再误提交 node_modules、日志等
总是不小心把 node_modules、.env、编译产物提交上去?.gitignore 告诉你如何忽略这些文件。本文讲清语法规则与常见模板,并解决"已提交又改不生效"的坑。
场景:git status 永远冒出一堆 node_modules/、__pycache__/、.env,看着烦还可能误提交。.gitignore 就是告诉 Git"这些文件/目录不要跟踪"的清单。
基本用法
在仓库根目录创建 .gitignore 文件,把要忽略的写进去:
# 依赖目录
node_modules/
# 编译产物
dist/
build/
*.class
# 环境变量(含密钥,绝不提交)
.env
.env.local
# 日志
*.log
# 系统文件
.DS_Store
Thumbs.db
写好后,这些内容就不会出现在 git status 里,也无法被 add。
语法规则速查
| 写法 | 含义 | 示例 |
|---|---|---|
node_modules/ | 忽略该目录 | 整个依赖目录 |
*.log | 通配,忽略所有 .log | 忽略日志 |
!important.log | 反向排除,强制跟踪 | 例外保留 |
/build/ | 仅根目录下的 | 防止误伤子目录 |
doc/*.txt | 相对目录模式 | 只忽略 doc 下 |
**/temp | 任意层级 | 匹配嵌套目录 |
关键规则:末尾斜杠
dir会匹配同名文件和目录dir/只匹配目录(推荐写带斜杠)
常见项目模板片段
Node/前端:
node_modules/
dist/
*.log
.env
Python:
__pycache__/
*.py[cod]
.venv/
Java:
target/
*.class
.idea/
大坑:已经提交过,ignore 不生效
.gitignore 只对未跟踪文件有效。若文件已被 add/commit,先取消跟踪:
# 从版本库取消跟踪但保留本地文件
git rm --cached node_modules/ -r
git commit -m "停止跟踪 node_modules"
之后 ignore 规则才生效。
确认规则生效
git check-ignore -v node_modules/某个文件
# 会输出命中哪条 ignore 规则
git status
# 被忽略的不再显示
常见问题
- 想忽略但保留 .gitkeep:写
dir/+!dir/.gitkeep。 - .env 必须忽略:里面常含密钥,误提交是安全事件。
- 全局忽略:
git config --global core.excludesfile指定一个全局忽略文件,可忽略个人工具的临时文件。
一句话速记
.gitignore 写忽略规则,对未跟踪文件生效;已提交过的要先 git rm --cached 再忽略。
?
常见问题 FAQ
我加了 .gitignore 但文件还是被跟踪/提交了,为什么?
.gitignore 只对"尚未被跟踪"的文件生效。如果文件之前已 git add/commit 过,需先 git rm --cached 文件名 取消跟踪,再让 ignore 规则生效。
怎么忽略 node_modules 这样的整个目录?
在 .gitignore 写 node_modules/ (带斜杠)。也可配合其他模式忽略多个目录。
想保留 .env.example 但忽略 .env 怎么配?
写 .env 会忽略所有叫 .env 的文件,但想保留的 .env.example 不会被误伤(因为名字不同)。若想强制不忽略某文件,用 !.env.example 反向排除。
.gitignore 对已提交到远程的文件有效吗?
无效。已经推到远程的文件不会被自动删除,需 git rm --cached 后在远程删除跟踪,再提交生效。ignore 只影响未来新增文件的跟踪。