跳到主要内容

`.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 是保持仓库整洁和安全的基础。它不仅能减少仓库体积,更能有效防止无关文件或敏感信息被意外提交。

探索关联打开关联网络