忽略文件
项目中总有一些文件不需要纳入版本控制,比如依赖包、编译产物、日志、本地配置和密钥。通过 .gitignore 文件,可以告诉 Git 忽略它们。
创建 .gitignore
在仓库根目录创建名为 .gitignore 的文件,每行写一个匹配规则:
# 依赖目录
node_modules/
# 构建产物
dist/
build/
*.class
# 日志
*.log
logs/
# 系统文件
.DS_Store
Thumbs.db
# 编辑器配置
.idea/
.vscode/*
!.vscode/extensions.json
# 环境变量与密钥
.env
.env.local
*.pem.gitignore 本身应该提交到仓库,这样团队所有成员都会使用相同的忽略规则。
匹配规则
| 规则 | 含义 |
|---|---|
# 开头 | 注释 |
*.log | 忽略所有 .log 文件 |
temp/ | 忽略任意位置的 temp 目录 |
/temp | 只忽略根目录下的 temp,不包括 src/temp |
doc/*.txt | 忽略 doc/notes.txt,但不包括 doc/server/arch.txt |
doc/**/*.pdf | 忽略 doc/ 下所有层级的 .pdf 文件 |
!important.log | 取反:不忽略该文件 |
? | 匹配任意单个字符 |
[abc] | 匹配方括号中的任意一个字符 |
注意
如果某个目录已经被忽略,则无法用
!重新包含该目录下的文件。例如忽略了build/,再写!build/keep.txt是无效的,应改为build/*再加!build/keep.txt。
已经被跟踪的文件怎么办
.gitignore 只对未跟踪的文件生效。如果文件已经提交过,加入 .gitignore 后 Git 仍会继续跟踪它。需要先停止跟踪:
# 停止跟踪单个文件(保留本地文件)
git rm --cached .env
# 停止跟踪整个目录
git rm -r --cached node_modules
git commit -m "停止跟踪 node_modules"警告
如果密钥或密码已经被推送到公共仓库,只删除文件没有用,它仍然存在于历史中。请立即更换该密钥,并考虑使用
git filter-repo清除历史。
检查忽略规则
某个文件为什么被忽略了?用 check-ignore 查看是哪条规则生效:
git check-ignore -v debug.log
# .gitignore:9:*.log debug.log列出所有被忽略的文件:
git status --ignored全局忽略
有些文件与项目无关,而与你的操作系统或编辑器有关(比如 .DS_Store)。可以配置一个全局的忽略文件,对所有仓库生效:
git config --global core.excludesFile ~/.gitignore_global然后在 ~/.gitignore_global 中写入规则即可。
仅本地忽略
如果只想在自己的本地仓库忽略某些文件,而不影响他人,可以写到 .git/info/exclude 中,格式与 .gitignore 相同。
常用模板
GitHub 维护了一个包含各种语言和框架的 .gitignore 模板仓库。可以用本站的 .gitignore 生成 按语言和编辑器勾选,拼成一份规则。
保留空目录
Git 只跟踪文件,不跟踪空目录。如果需要在仓库中保留一个空目录,惯例是在其中放一个 .gitkeep 空文件:
touch uploads/.gitkeep