沉梦手记 沉梦手记
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • 网络通信
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 音视频处理
  • Linux 与容器化运维
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • 网络通信
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 音视频处理
  • Linux 与容器化运维
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 开发工具篇

    • idea相关

    • 玩转Git

      • 基础知识梳理
      • Git配置相关操作
      • git修改已提交的用户名和邮箱
      • git提交规范
      • git分支管理
      • git常用操作
      • git-submodule子模块管理
      • fork工作流与上游同步
      • gitignore最佳实践
        • 什么是 .gitignore?
        • .gitignore 语法规则
        • 各技术栈 .gitignore 模板
          • Java / Spring Boot
          • Node.js / Vue / 前端
          • uniapp / 小程序
          • 通用根仓库(管理多子项目)
        • 常见问题与陷阱
          • 1. .gitignore 不生效?
          • 2. 已经提交了 .env 等敏感文件怎么办?
          • 3. 全局 .gitignore
          • 4. 查看某个文件为什么被忽略
        • .gitignore 编写建议
        • 学习参考
      • 常见问题
    • Maven相关

    • 前端工具

    • 测试工具

    • AI工具

  • 工具库篇

  • 开发技巧篇

  • 工具类系列

  • 随笔

  • 开发日常
  • 开发工具篇
  • 玩转Git
沉梦听雨
2026-07-22
目录

gitignore最佳实践

# .gitignore 最佳实践

# 什么是 .gitignore?

.gitignore 是一个文本文件,告诉 Git 哪些文件或目录不应该被跟踪(不纳入版本控制)。

应该忽略的文件类型:

  • 构建产物:dist/、target/、build/、*.class
  • 依赖目录:node_modules/、.mvn/
  • IDE 配置:.idea/、.vscode/、*.iml
  • 环境变量文件:.env.local、.env.*.local(含敏感信息)
  • 系统文件:.DS_Store、Thumbs.db
  • 日志文件:*.log、logs/
  • 缓存目录:.vite/、.cache/

不应该忽略的文件:

  • 源代码
  • 配置文件模板(如 .env.example、.env.development)
  • 文档(README、DESIGN 等)
  • 依赖锁定文件(pnpm-lock.yaml、package-lock.json、pom.xml)

# .gitignore 语法规则

语法 含义 示例
# 注释 # 这是注释
*.log 匹配所有 .log 文件 error.log、app.log
node_modules/ 匹配名为 node_modules 的目录(任意层级) src/node_modules/、node_modules/
/dist 只匹配根目录下的 dist dist/(不匹配 src/dist/)
dist/ 匹配任意层级的 dist 目录 dist/、src/dist/
!file 取反,强制跟踪(即使前面被忽略) !lib/import.js
**/logs 匹配任意层级的 logs 目录 logs/、a/b/logs/
temp/*.txt 匹配 temp 目录下的 .txt 文件 temp/test.txt

注意:! 取反规则不能重新包含已经被上级目录忽略的文件。例如 node_modules/ 已忽略,!node_modules/lib.js 无效。

# 各技术栈 .gitignore 模板

# Java / Spring Boot

# 构建产物
target/
*.class
*.jar
*.war

# Maven
.mvn/
mvnw
mvnw.cmd

# IDE
.idea/
*.iml
*.iws
*.ipr
.vscode/
.settings/
.project
.classpath

# 日志
*.log
logs/

# 系统
.DS_Store
Thumbs.db
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# Node.js / Vue / 前端

# 依赖
node_modules/

# 构建产物
dist/
dist-ssr/

# 缓存
.vite/
.cache/
*.tsbuildinfo

# 环境变量(含敏感信息)
.env.local
.env.*.local

# 日志
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# IDE
.idea/
.vscode/
*.suo
*.ntvs*
*.njsproj
*.sln

# 系统
.DS_Store
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# uniapp / 小程序

# 依赖
node_modules/

# 构建产物
dist/
unpackage/

# 环境变量
.env.local
.env.*.local

# 缓存
.vite/
*.tsbuildinfo

# pnpm
.pnpm-store/

# 微信开发者工具(含本地配置,不应提交)
project.private.config.json

# IDE
.idea/
.vscode/
.DS_Store
*.log
*.local
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 通用根仓库(管理多子项目)

# IDE
.idea/
.vscode/

# 系统
.DS_Store
Thumbs.db

# 日志
*.log
1
2
3
4
5
6
7
8
9
10

子项目各自有自己的 .gitignore,根仓库只需忽略 IDE 和系统文件。

# 常见问题与陷阱

# 1. .gitignore 不生效?

原因:文件已经被 Git 跟踪了,.gitignore 只对未跟踪的文件生效。

解决:先从 Git 索引中移除(不删除本地文件),再提交:

# 移除单个文件
git rm --cached <file>

# 移除整个目录
git rm -r --cached <directory>

# 提交
git commit -m "chore: 移除不应跟踪的文件,添加 .gitignore"
1
2
3
4
5
6
7
8

--cached 参数表示只从 Git 索引中移除,不删除本地文件。

# 2. 已经提交了 .env 等敏感文件怎么办?

# 1. 从历史记录中彻底移除(谨慎操作)
git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch .env' \
  --prune-empty --tag-name-filter cat -- --all

# 2. 添加到 .gitignore
echo ".env" >> .gitignore

# 3. 强制推送
git push --force --all

# 4. ⚠️ 立即更换所有泄露的密钥/密码!
1
2
3
4
5
6
7
8
9
10
11
12

即使从 Git 历史中移除,如果已经推送到公开仓库,敏感信息可能已被他人获取。务必更换密钥。

# 3. 全局 .gitignore

可以为所有项目设置一个全局 .gitignore,忽略系统文件和 IDE 文件:

# 创建全局 .gitignore 文件
echo ".DS_Store
.idea/
.vscode/
*.iml
Thumbs.db" > ~/.gitignore_global

# 配置 Git 使用全局 .gitignore
git config --global core.excludesfile ~/.gitignore_global
1
2
3
4
5
6
7
8
9

项目级 .gitignore 和全局 .gitignore 会同时生效,取并集。

# 4. 查看某个文件为什么被忽略

git check-ignore -v <文件路径>

# 示例输出:
# .gitignore:3:node_modules/  node_modules/express
# 表示 .gitignore 第 3 行的 node_modules/ 规则忽略了这个文件
1
2
3
4
5

# .gitignore 编写建议

  1. 早建早好:项目初始化时就创建 .gitignore,避免后续清理麻烦
  2. 宁多勿少:不确定是否该跟踪的文件,先忽略。需要跟踪时用 ! 取反
  3. 按技术栈选择:参考 github/gitignore (opens new window) 官方模板
  4. 团队统一:.gitignore 提交到仓库,团队成员共享同一份配置
  5. 不要忽略锁定文件:pnpm-lock.yaml、package-lock.json、pom.xml 等依赖锁定文件必须提交,保证团队依赖版本一致

# 学习参考

  • gitignore 官方文档 (opens new window)
  • GitHub 官方 gitignore 模板库 (opens new window)
  • gitignore.io - 生成 .gitignore 文件 (opens new window)
上次更新: 2026/7/24 16:59:26
fork工作流与上游同步
常见问题

← fork工作流与上游同步 常见问题→

Theme by Vdoing | Copyright © 2023-2026 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式