基本概念
作用——
.gitignore文件用于指定Git版本库应忽略的文件/目录,避免提交临时文件、敏感信息或自动生成文件文件位置
- 通常放在
Git仓库根目录,对整个项目生效 - 子目录可放置额外的
.gitignore,仅作用于该目录及子目录(优先级高于根目录)
MyProject<- Git仓库根目录 ├── .gitigore<- 针对整个仓库生效 ├── LICENSE ├── README.md ├── src │ ├── .gitigore<- 仅针对src目录生效 │ └── untils.py └── docs- 通常放在
规则编写
- 每行写一个忽略规则
- 逐行匹配,从上到下应用规则
- 后定义的例外规则(
!)可覆盖前面的排除规则
规则语法
语法 示例 说明 **.log匹配任意字符(不含路径分隔符) ****/tmp匹配任意层级目录(如 a/tmp、a/b/tmp)??.txt匹配单个字符 [abc][abc].txt匹配列表中的字符 /前缀/build仅匹配根目录下的文件 /后缀dir/仅匹配目录(不匹配同名文件) !!important.txt排除例外(需在忽略规则后定义)
项目忽略规则
场景一:配置项目忽略规则
项目根目录创建
.gitignore文件touch.gitignore编辑忽略规则
# 忽略所有 .log 文件*.log# 忽略特定目录build/ dist/ node_modules/# 忽略系统文件(Mac/Windows).DS_Store Thumbs.db# 例外:不忽略重要文件!src/config.cfg应用忽略规则
如果文件未被
Git跟踪,规则自动生效如果文件已被
Git跟踪(如提交过),需清除缓存# 移除所有文件的缓存(保留本地文件)gitrm-r --cached.# 重新添加文件(应用 .gitignore 规则)gitadd.# 提交变更gitcommit -m"Update .gitignore"
场景二:某文件已被追踪,要求修改规则忽略该文件
删除
Git缓存中该文件(保留本地文件)gitrm--cached App.class修改忽略规则
# 应用内忽略配置App.class
场景三:大量修改规则,要求清除全部追踪文件,重新应用规则
删除
Git缓存中所有文件(保留本地文件)gitrm-r --cached.修改忽略规则
# 忽略 logs/ 和 temp/ 目录logs/ temp/重新添加所有文件(此时
.gitignore规则生效)gitadd.
场景四:某文件已被忽略,要求强制跟踪该文件
添加文件(告知文件已被忽略)
$gitaddApp.class The following paths are ignored by one of your .gitignore files: App.class Use -fifyou really want toaddthem.强制添加被忽略文件
gitadd-f App.class
场景五:修改忽略规则,要求排除例外文件
忽略规则:排除
.开头的隐藏文件和.class文件# 排除所有.开头的隐藏文件:.*# 排除所有.class文件:*.class例外文件:不忽略文件
.gitignore和App.class# 不排除.gitignore和App.class:!.gitignore!App.class
场景六:查找忽略规则
查找与
App.class相关的忽略规则$gitcheck-ignore -v App.class .gitignore:3:*.class App.class# 第3行规则忽略 App.class 文件,以便知道如何修订规则
全局忽略规则
全局生效:指定统一的
.gitignore文件,应用到当前用户的所有Git项目中(无需在每个项目重复配置)忽略文件:适合忽略与项目无关但个人环境通用的文件,如:
系统自动生成文件(如
Mac的.DS_Store、Windows的Thumbs.db)编辑器临时文件(如
VS Code的.vscode/、JetBrains的.idea/)日志或缓存(如
*.log、npm-debug.log)
场景一:配置全局忽略规则
任意目录下(通常在用户主目录)创建全局
.gitignore文件touch~/.gitignore_global编辑全局忽略规则
# 系统文件.DS_Store Thumbs.db Desktop.ini# IDE/编辑器.idea/ .vscode/ *.swp# 日志/缓存*.log *.tmp可从 GitHub/gitignore 复制通用规则,或使用 gitignore.io 生成
识别全局忽略规则
$gitconfig --global core.excludesfile ~/.gitignore_global验证配置是否生效
$gitconfig --global core.excludesfile /Users/username/.gitignore_global