`.gitignore`
.gitignore 是 Git 仓库中用于定义“哪些文件不需要被版本控制”的核心配置文件。它的主要作用是告诉 Git 忽略特定的文件或目录,从而避免将敏感信息、用户本地配置、开发环境产生的临时文件,或可通过包管理器复现的依赖项提交到仓库中。
语法与结构
.gitignore 文件基于 glob 模式(通配符)来匹配文件名和路径。基本规则如下:
- 空行:会被忽略,通常用于视觉上的分隔和排版。
- 注释:以
#开头的行被视为注释,不会生效。 - Glob 模式:用于匹配文件或路径,常用符号包括:
*:匹配零个或多个任意字符。?:匹配恰好一个任意字符。[...]:匹配方括号内指定的任意单个字符。**/:递归匹配任意层级的目录。
常见模式示例
# 忽略所有 .log 文件
*.log
# 忽略特定文件
secret.txt
# 忽略 tmp 目录下的所有文件
tmp/*
# 忽略 docs 目录下的所有 .txt 文件
docs/*.txt
# 忽略 node_modules 目录及其所有内容
node_modules/
# 忽略任意层级目录下的所有 .pdf 文件
**/*.pdf
最佳实践
- 全局 vs 本地:你可以配置一个全局
.gitignore(通常位于~/.gitignore或通过core.excludesFile指定)来忽略所有项目通用的文件(如.DS_Store),同时在每个仓库根目录维护一个本地.gitignore来处理项目特定的忽略规则。 - 尽早提交:在项目初始化阶段就创建并提交
.gitignore。这能防止在开发早期意外将构建产物或敏感文件纳入版本控制,避免后续清理的麻烦。 - 处理已提交的敏感数据:如果密钥或凭据已经被提交,首先轮换或撤销该凭据。仅仅将路径加入
.gitignore不会从 Git 历史中删除已存在的文件。必须使用git filter-repo、BFG Repo-Cleaner 或托管平台提供的历史重写工具来清除历史记录,并通知所有协作者重新克隆或拉取重写后的历史。 - 使用模板:大多数项目类型都有通用的忽略需求。推荐使用 gitignore.io 等工具生成针对特定语言或框架(如 Java, Python, Node.js)的预置模板,以此作为起点。
Java 项目 .gitignore 示例
# 编译后的类文件
*.class
# 构建输出目录
target/
out/
# 打包文件
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# Maven 相关
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# IntelliJ IDEA
.idea/
*.iml
*.iws
# Eclipse
.classpath
.project
.settings/
# macOS 系统文件
.DS_Store
一个配置完善的 .gitignore 是保持仓库整洁和安全的基础。它不仅能减少仓库体积,更能有效防止无关文件或敏感信息被意外提交。