.gitignore 生成器
.gitignore 生成器,是指按项目用到的语言、框架、编辑器与系统挑选模板,合并成一份 Git 忽略规则文件。本工具免费、无需注册:勾选 Node、Python、Java、Go 等模板即可生成 .gitignore,跨模板重复规则自动合并,含否定规则的段落原样保序;也可粘贴现有 .gitignore 做语法体检与逐条中文解释,用路径匹配测试查出文件被哪行忽略。全程浏览器本地生成,内容不上传。
按分类勾选 gitignore 模板
已选 3 项,模板库共 52 个
操作系统 · 3 个 · 建议放全局
系统自己生成的垃圾文件,和项目无关,建议放全局 gitignore
看它会写入哪些规则(11 行)
Finder 逛过一次目录就会留下 .DS_Store,和项目无关,最适合放全局。
# Finder 与系统服务生成的文件
.DS_Store
.AppleDouble
.LSOverride
.Spotlight-V100
.Trashes
._*
# 外接盘与网络盘
.fseventsd
.TemporaryItems
.VolumeIcon.icns复核于 2026-08-31
看它会写入哪些规则(11 行)
资源管理器的缩略图缓存与回收站元数据。
# 缩略图缓存
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# 文件夹配置与回收站
desktop.ini
$RECYCLE.BIN/
# 系统快捷方式与转储
*.lnk
*.stackdump复核于 2026-08-31
看它会写入哪些规则(6 行)
临时文件与桌面环境的挂载点。
# 临时文件与回收站
*~
.fuse_hidden*
.directory
.Trash-*
.nfs*复核于 2026-08-31
编辑器 / IDE · 8 个 · 建议放全局
你这台机器的编辑器习惯,不是项目产物,建议放全局 gitignore
看它会写入哪些规则(8 行)
注意 .vscode 里的 settings.json / extensions.json 有时是团队约定,要提交就用 ! 单独放行。
# VS Code 的个人工作区配置
.vscode/
.history/
*.code-workspace
# 想让团队共享推荐插件与调试配置,就把下面几行的注释去掉
# !.vscode/settings.json
# !.vscode/extensions.json
# !.vscode/launch.json复核于 2026-08-31
看它会写入哪些规则(8 行)
.idea 是本机的项目索引与个人偏好,写进仓库等于把个人习惯推给全队。
# JetBrains 全家桶的本地项目配置
.idea/
*.iml
*.iws
*.ipr
# 本地历史与缓存
out/
cmake-build-*/复核于 2026-08-31
看它会写入哪些规则(7 行)
# 交换文件与持久化撤销
*.swp
*.swo
*.swn
Session.vim
.netrwhist
tags复核于 2026-08-31
看它会写入哪些规则(6 行)
# 自动保存与备份
*~
\#*\#
.\#*
.emacs.desktop
auto-save-list/复核于 2026-08-31
看它会写入哪些规则(3 行)
# 工作区是本机状态,项目文件才可能需要提交
*.sublime-workspace
# *.sublime-project 通常可以提交,按团队约定决定复核于 2026-08-31
看它会写入哪些规则(7 行)
# Eclipse 工程元数据
.metadata/
.project
.classpath
.settings/
bin/
.apt_generated/复核于 2026-08-31
看它会写入哪些规则(5 行)
# 每个开发者自己的窗口布局与断点
xcuserdata/
*.xcuserstate
*.xcscmblueprint
DerivedData/复核于 2026-08-31
看它会写入哪些规则(6 行)
# Visual Studio 的本机状态
.vs/
*.suo
*.user
*.userosscache
*.sln.docstates复核于 2026-08-31
语言 / 运行时 · 16 个 · 建议放仓库
依赖目录、编译产物与缓存,属于项目,放仓库的 .gitignore
看它会写入哪些规则(19 行)
node_modules 一定要忽略;锁文件相反,应用项目一般应该提交。
# 依赖目录:装出来的东西,不进仓库
node_modules/
jspm_packages/
# 运行日志与诊断报告
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
report.[0-9]*.json
# 缓存
.npm/
.yarn/cache/
.eslintcache
.node_repl_history
# 打包产物(按你的项目改)
dist/
build/
# 锁文件通常应该提交,别忽略:package-lock.json / yarn.lock / pnpm-lock.yaml复核于 2026-08-31
看它会写入哪些规则(26 行)
虚拟环境目录名各家不同,这里覆盖了 venv / .venv / env 三种常见写法。
# 字节码与扩展
__pycache__/
*.py[cod]
*$py.class
*.so
# 打包与分发
build/
dist/
sdist/
wheels/
*.egg-info/
.eggs/
# 虚拟环境
venv/
.venv/
env/
ENV/
# 测试与类型检查缓存
.pytest_cache/
.mypy_cache/
.ruff_cache/
.tox/
.coverage
htmlcov/
# Jupyter
.ipynb_checkpoints/复核于 2026-08-31
看它会写入哪些规则(12 行)
# 编译产物
*.class
# 打包产物
*.jar
*.war
*.ear
*.nar
# 虚拟机崩溃日志
hs_err_pid*
replay_pid*
# 想提交 Gradle Wrapper 的 jar 就保留这一行例外
!gradle/wrapper/gradle-wrapper.jar复核于 2026-08-31
看它会写入哪些规则(14 行)
# 编译产物与测试二进制
*.exe
*.exe~
*.dll
*.dylib
*.test
# 覆盖率
*.out
coverage.txt
# 依赖目录(用 vendor 模式时反而要提交,按项目决定)
vendor/
# Go 工作区文件
go.work
go.work.sum复核于 2026-08-31
看它会写入哪些规则(5 行)
Cargo.lock:二进制项目应提交,库项目通常不提交。
# Cargo 构建目录
target/
# 崩溃调试文件
**/*.rs.bk
*.pdb复核于 2026-08-31
看它会写入哪些规则(6 行)
# Composer 装出来的依赖
vendor/
composer.phar
# 本地配置
.phpunit.result.cache
.php-cs-fixer.cache复核于 2026-08-31
看它会写入哪些规则(9 行)
# Bundler
.bundle/
vendor/bundle/
# 构建产物
*.gem
*.rbc
/.yardoc/
/_yardoc/
/coverage/复核于 2026-08-31
看它会写入哪些规则(16 行)
# 目标文件与库
*.o
*.obj
*.a
*.lib
*.so
*.dylib
*.dll
# 可执行文件与调试信息
*.exe
*.pdb
*.idb
# CMake
CMakeCache.txt
CMakeFiles/
cmake_install.cmake复核于 2026-08-31
看它会写入哪些规则(11 行)
# 编译输出
[Bb]in/
[Oo]bj/
[Dd]ebug/
[Rr]elease/
# NuGet
packages/
*.nupkg
# 用户特定文件
*.user
*.rsuser复核于 2026-08-31
看它会写入哪些规则(8 行)
# Swift Package Manager
.build/
.swiftpm/
Packages/
# CocoaPods(是否提交 Pods 目录按团队约定)
Pods/
# Carthage
Carthage/Build/复核于 2026-08-31
看它会写入哪些规则(7 行)
# 编译产物
*.class
build/
out/
# Kotlin 增量编译缓存
.kotlin/
kotlin-js-store/复核于 2026-08-31
看它会写入哪些规则(6 行)
# pub 缓存与产物
.dart_tool/
.packages
build/
doc/api/
pubspec.lock复核于 2026-08-31
看它会写入哪些规则(7 行)
# sbt
target/
project/target/
project/project/
.bloop/
.metals/
.bsp/复核于 2026-08-31
看它会写入哪些规则(6 行)
# Mix 构建与依赖
_build/
deps/
cover/
*.ez
erl_crash.dump复核于 2026-08-31
看它会写入哪些规则(5 行)
# 编译产物与 LuaRocks
*.luac
luac.out
*.src.rock
.luarocks/复核于 2026-08-31
看它会写入哪些规则(7 行)
# 构建产物
blib/
pm_to_blib
Makefile.old
MYMETA.json
MYMETA.yml
_build/复核于 2026-08-31
框架 / 构建工具 · 19 个 · 建议放仓库
框架与构建工具生成的目录,属于项目,放仓库的 .gitignore
看它会写入哪些规则(8 行)
# Next.js 构建产物
.next/
out/
# Vercel
.vercel/
# TypeScript 增量信息
next-env.d.ts
*.tsbuildinfo复核于 2026-08-31
看它会写入哪些规则(7 行)
# CRA 产物与缓存
build/
.eslintcache
# 本地环境变量(示例文件要保留)
.env.local
.env.development.local
.env.production.local复核于 2026-08-31
看它会写入哪些规则(6 行)
# Vue CLI / Vite 产物
dist/
dist-ssr/
# 本地配置
.env.local
*.local复核于 2026-08-31
看它会写入哪些规则(6 行)
# Nuxt 生成目录
.nuxt/
.output/
.nitro/
.cache/
dist/复核于 2026-08-31
看它会写入哪些规则(6 行)
# Angular CLI 产物与缓存
dist/
tmp/
.angular/
connect.lock
libpeerconnection.log复核于 2026-08-31
看它会写入哪些规则(5 行)
# Vite 产物与依赖预构建缓存
dist/
dist-ssr/
node_modules/.vite/
*.local复核于 2026-08-31
看它会写入哪些规则(8 行)
db.sqlite3 与 media/ 是运行时数据,不该进仓库;staticfiles 是 collectstatic 的产物。
# 本地数据库与用户上传
db.sqlite3
db.sqlite3-journal
media/
# 收集出来的静态文件
staticfiles/
# 本地配置
local_settings.py复核于 2026-08-31
看它会写入哪些规则(4 行)
# Flask 实例目录与本地配置
instance/
.webassets-cache
.flaskenv复核于 2026-08-31
看它会写入哪些规则(7 行)
# Laravel 运行时目录
/vendor/
/public/storage
/storage/*.key
/bootstrap/cache/
Homestead.json
Homestead.yaml复核于 2026-08-31
看它会写入哪些规则(6 行)
# Maven / Gradle 产物
target/
build/
# 本地覆盖配置
application-local.yml
application-local.properties复核于 2026-08-31
看它会写入哪些规则(9 行)
# 运行时目录
log/
tmp/
storage/
# 预编译静态资源
public/assets/
public/packs/
# 凭据密钥:泄漏就要立刻轮换
config/master.key复核于 2026-08-31
看它会写入哪些规则(7 行)
# Flutter 工具产物
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
build/
.pub-cache/
.pub/复核于 2026-08-31
看它会写入哪些规则(8 行)
# Gradle 与构建产物
build/
.gradle/
# 本机 SDK 路径,绝对不能提交
local.properties
# 签名文件:提交等于把发布密钥交出去
*.jks
*.keystore复核于 2026-08-31
看它会写入哪些规则(12 行)
Library 与 Temp 是本机生成的,几个 G 的体积不该进仓库。
# Unity 本机生成目录
Library/
Temp/
Obj/
Logs/
UserSettings/
# 构建产物
Builds/
# 自动生成的工程文件
*.csproj
*.unityproj
*.sln复核于 2026-08-31
看它会写入哪些规则(7 行)
# Gradle 缓存与产物
.gradle/
build/
# 本机属性文件
gradle-app.setting
# Wrapper 的 jar 一般要提交,用例外放行
!gradle-wrapper.jar复核于 2026-08-31
看它会写入哪些规则(7 行)
# Maven 产物
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
release.properties
dependency-reduced-pom.xml复核于 2026-08-31
看它会写入哪些规则(4 行)
# Composer 依赖与本地覆盖
vendor/
composer.phar
# composer.lock 应用项目一般应提交,库项目按约定复核于 2026-08-31
看它会写入哪些规则(7 行)
tfstate 里常含明文敏感值,一旦提交过就要按泄漏处理。
# 本地状态与插件目录
.terraform/
terraform.tfstate
terraform.tfstate.backup
# 变量文件常含密钥
*.tfvars
crash.log复核于 2026-08-31
看它会写入哪些规则(4 行)
注意 .dockerignore 与 .gitignore 语义相近但不相同,别互相复制。
# 本地覆盖与数据卷
docker-compose.override.yml
.docker/
data/复核于 2026-08-31
通用 / 其他 · 6 个 · 建议放仓库
日志、环境变量、覆盖率报告这类跨语言都会有的东西
看它会写入哪些规则(11 行)
# 日志
*.log
logs/
# 临时与备份
*.tmp
*.temp
*.bak
*.orig
# 补丁与冲突残留
*.rej
*.swp复核于 2026-08-31
看它会写入哪些规则(13 行)
示例文件 .env.example 要保留,所以用例外行放行;已经提交过的密钥请直接轮换。
# 环境变量:里面通常是数据库口令与第三方密钥
.env
.env.local
.env.*.local
# 示例文件要提交,用例外放行
!.env.example
!.env.sample
# 证书与私钥
*.pem
*.key
*.p12
id_rsa
id_ed25519复核于 2026-08-31
看它会写入哪些规则(7 行)
# 覆盖率与测试报告
coverage/
.nyc_output/
test-results/
playwright-report/
junit.xml
lcov.info复核于 2026-08-31
看它会写入哪些规则(9 行)
产物目录名各项目不同,勾了之后按自己的目录改。
# 常见打包产物目录
dist/
build/
output/
release/
# 压缩包
*.zip
*.tar.gz
*.7z复核于 2026-08-31
看它会写入哪些规则(10 行)
大文件建议走 Git LFS,直接提交会让整个仓库的克隆变慢,而且删掉也不会变小。
# 视频与音频原始素材
*.mp4
*.mov
*.avi
*.wav
# 设计稿与磁盘镜像
*.psd
*.sketch
*.iso
*.dmg复核于 2026-08-31
看它会写入哪些规则(6 行)
# 本地数据库与导出
*.sqlite
*.sqlite3
*.db
*.sql.gz
dump.rdb复核于 2026-08-31
结果
3 个模板 · 26 条规则 · 18 行注释 · 已合并 0 条重复 · 保留 0 条重复
以点开头的文件在 macOS 与部分浏览器里会被当成隐藏文件、甚至下载不出来;遇到这种情况就下载 gitignore.txt,放进项目根目录后改名成 .gitignore 即可。
# 本文件由小鹿tools .gitignore 生成器生成
# 已选模板:macOS、VS Code、Node / npm
# 规则含义与路径匹配测试见 https://www.xiaolutools.com/tools/gitignore-generator
# ---- macOS ----
# Finder 与系统服务生成的文件
.DS_Store
.AppleDouble
.LSOverride
.Spotlight-V100
.Trashes
._*
# 外接盘与网络盘
.fseventsd
.TemporaryItems
.VolumeIcon.icns
# ---- VS Code ----
# VS Code 的个人工作区配置
.vscode/
.history/
*.code-workspace
# 想让团队共享推荐插件与调试配置,就把下面几行的注释去掉
# !.vscode/settings.json
# !.vscode/extensions.json
# !.vscode/launch.json
# ---- Node / npm ----
# 依赖目录:装出来的东西,不进仓库
node_modules/
jspm_packages/
# 运行日志与诊断报告
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
report.[0-9]*.json
# 缓存
.npm/
.yarn/cache/
.eslintcache
.node_repl_history
# 打包产物(按你的项目改)
dist/
build/
# 锁文件通常应该提交,别忽略:package-lock.json / yarn.lock / pnpm-lock.yaml粘贴现有的 .gitignore:解释、体检与路径匹配测试都用它
最多 20 万字符。模板全部内置在页面里,生成、解析与匹配都在你的浏览器本地完成,内容不上传;粘贴的内容刷新即清空,也不会写进本地存储。
如何使用.gitignore 生成器
在左边按分类勾选模板:语言选 Node、Python、Java、Go,再加上你在用的框架、编辑器与操作系统;勾之前可以展开看每个模板到底写入哪些 git 忽略文件规则,不让你勾一个黑箱。
右边实时生成结果,按需要开关段头注释、合并重复规则、换行符,或者勾上「拆出全局版」,把编辑器与系统那几类单独拆成一份放在你本机的全局 gitignore。
点复制或下载放进项目根目录;把现有的 .gitignore 粘进下面的输入框,再切到「解释与体检」和「路径匹配测试」,就能查出哪一行有问题、某个文件到底被哪一行忽略。
关于.gitignore 生成器的常见问题
- gitignore 生成器会上传我的项目信息吗?
- 不会上传。所有模板都内置在页面里,不联网去 gitignore.io 或任何模板仓库拉取,所以你勾了哪些语言、粘了哪份 .gitignore、试匹配了哪个路径,都不会告诉任何服务器。生成、解析、体检与匹配测试全在你的浏览器本地跑,粘贴的内容刷新即清空,也不会写进本地存储——那里面常有内部项目名和密钥文件名,没有理由驻留。只有段头注释、去重这类展示偏好和勾选过的模板 id 会记在本机。(站点自身仅有匿名访问量统计,与你粘的内容无关。)
- 手机上能用 gitignore 生成器吗?
- 可以,不用装任何 App 或插件。这是纯网页实现,手机、平板、电脑浏览器打开即用。窄屏上模板勾选区会改成单列折叠分组,结果区和速查表可以横向滚动,复制按钮走系统剪贴板,复制完直接粘到你的编辑器或聊天窗口。剪贴板不可用时会提示你手动选中文本,不会静默失败。要注意的是,下载的文件名以点开头,部分手机浏览器会拒绝或者当成隐藏文件,这时改用「下载为 gitignore.txt」再改名。
- gitignore 怎么写才能忽略整个文件夹?
- 在目录名后面加一个斜杠,比如写 dist/ 就只忽略名叫 dist 的目录,同名的普通文件不受影响;不加斜杠的 dist 则文件和目录都会命中。要只忽略仓库根目录下那一个、不连累子目录里的同名目录,就在前面再加一个斜杠写成 /dist/。还有一种写法是在目录名后面加斜杠和两个星号,它只忽略目录里面的一切、目录本身不被这条命中——这个区别在你后面还要写例外规则时非常关键。
- gitignore 不生效是什么原因?怎么排查?
- 本页整理了六个真实原因:文件已经被 git 跟踪、父目录被整体排除导致例外行失效、行尾有未转义的空格、文件带 UTF-8 BOM、用了反斜杠当路径分隔符、写成了磁盘绝对路径。排查顺序建议是:先跑 git check-ignore -v 看是哪一行在起作用,没有输出就说明压根没有规则命中;再看这个文件是不是早就被跟踪了。本页的路径匹配测试可以在本地当场演示第二种情况,直接告诉你是哪一级父目录挡住的。
- gitignore 忽略已跟踪文件为什么没用?
- 因为 .gitignore 只管还没被 git 跟踪的文件。一个文件只要被提交过一次,它就进了索引,之后你把它写进忽略规则,git status 里照样会显示它的改动。正确做法是先执行 git rm --cached 加文件名(目录再加 -r)把它从索引里去掉,再提交一次。要特别提醒的是:这只是让它不再被跟踪,历史里那份还在——如果去掉的是 .env 或密钥文件,删文件不等于删历史,请直接轮换那份凭据。
- gitignore 里的感叹号和星号分别是什么意思?
- 感叹号开头是例外,把前面已经被忽略的路径重新加回来,比如忽略了整个 .env 家族之后写一条例外行放行 .env.example。星号是通配符,匹配本层内任意个字符但不跨越斜杠,所以写 .log 的后缀规则能同时命中根目录和子目录里的日志。两个星号连写且单独成段时才有跨层含义,写在段中间(像 a 加两个星号加 b)就退化成一个普通星号。要匹配名字里真的带感叹号或井号的文件,得在前面加反斜杠转义。
- .idea 和 .DS_Store 要不要写进项目的 gitignore?
- 更推荐放全局。.idea 是 JetBrains 的本机项目索引,.vscode 是你的编辑器偏好,.DS_Store 是 Finder 逛过目录留下的——它们都是「你这台机器的习惯」,不是「这个项目的产物」,写进仓库等于把个人偏好推给全队,队友用别的编辑器还得跟着维护。本工具提供一键拆分:勾上「拆出全局版」,操作系统与编辑器两类会单独成一份,配上 git config --global core.excludesFile 就对你本机所有仓库生效。例外是团队真的共享调试配置时,那几个文件可以用例外行单独放行。
- package-lock.json 要不要写进 gitignore?
- 应用类项目一般应该提交锁文件,不要忽略。锁文件记录的是这次实际装到的每个依赖的确切版本,提交它,团队成员和 CI 才能装出同一份依赖树,避免「我这儿是好的」。库类项目另有取舍,因为库的使用者会按自己的依赖解析重新计算,锁文件对下游没有约束力,很多库项目就不提交。本工具遇到你把锁文件写进忽略时只会给一条提示说明口径,不会替你决定,也不会自动删掉那一行。
- gitignore 生成器支持哪些语言模板?
- 模板库按操作系统、编辑器与 IDE、语言与运行时、框架与构建工具、通用五类组织,一共 52 个模板,页面上的分类总览表里每一类有几个、典型模板是哪些都是从数据表现算的。语言侧覆盖 Node、Python、Java、Go、Rust、PHP、Ruby、C 系、.NET、Swift、Kotlin、Dart 等;框架侧覆盖 Next.js、Vue、Django、Laravel、Spring Boot、Flutter、Android、Unity 等。这是我们整理的常用集合,标注了复核日期 2026-08-31,不宣称把所有生态都收全了;缺的那条你可以生成之后手动补一行。
- 这个 gitignore 生成器和 gitignore.io 有什么区别?
- 定位不同,各有各的合适场景。那类模板站胜在模板库大而全、按名字直接拼接;本工具把重点放在合并之后的正确性和可解释上:跨模板的重复规则会合并,但绝不跨否定规则合并,因为那会静默改变判定结果;能把粘贴进来的文件逐条翻译成中文,做十几项体检;还能用路径匹配测试当场告诉你某个文件被哪一行忽略;并且可以一键把编辑器与系统规则拆成全局版。模板全部内置、不联网拉取,所以你的技术栈信息也不会外传。
gitignore 语法速查:通配符、感叹号与目录写法
gitignore 通配符与 gitignore 感叹号记住三件事就够用:星号不跨斜杠、结尾斜杠只匹配目录、感叹号是例外而不是删除。完整含义在下表 12 条写法里逐条列出,每条都给了匹配什么、不匹配什么。gitignore 在线生成不需要装任何工具,勾完模板再对照这张表微调最省事。
| 写法 | 含义 | 例子 | 匹配 | 不匹配 |
|---|---|---|---|---|
foo | 任意层级下名为 foo 的文件或目录 | node_modules | node_modules、packages/a/node_modules | node_modules_old、my_node_modules |
/foo | 开头的斜杠是锚定:只匹配仓库根目录下的 foo | /build | build、build/x.js | src/build、app/build |
foo/ | 结尾的斜杠表示只匹配目录,同名文件不受影响 | dist/ | dist 这个目录、a/dist | 名叫 dist 的普通文件 |
* | 匹配本层内任意个字符,但不跨越斜杠 | *.log | error.log、logs/error.log | error.log.txt、logs 目录本身 |
? | 匹配本层内的一个字符 | log?.txt | log1.txt、logA.txt | log.txt、log12.txt |
[abc] | 字符类:方括号里任选一个字符,可写区间 | *.py[cod] | a.pyc、a.pyo、a.pyd | a.py、a.pycx |
[!abc] | 取反字符类:不是方括号里这些字符 | log[!0-9].txt | logA.txt | log1.txt |
**/foo | 显式写出「任意层级」,不写其实也是这个效果 | **/temp | temp、a/temp、a/b/temp | temporary、a/temp2 |
foo/** | 只忽略目录里面的一切,目录本身不被这条命中 | dist/** | dist/app.js、dist/a/b.js | dist 这个目录本身 |
a/**/b | 中间的两个星号跨任意层目录,也可以是零层 | src/**/tmp | src/tmp、src/a/tmp、src/a/b/tmp | tmp、lib/src/tmp |
!foo | gitignore 感叹号是例外:把前面被忽略的重新加回来 | !.env.example | 把 .env.example 从忽略里救回来 | 父目录已被整体排除时这条不生效 |
# 注释 | 井号开头整行是注释;要匹配井号开头的文件名得转义成反斜杠加井号 | \#note.md | 名字就叫 #note.md 的文件 | note.md |
下面这几种写法在页面上一律按原文显示,转义符与方括号都是规则的一部分,抄进文件时别丢:
*.log—— 任意层级下所有以 .log 结尾的文件!dist/—— 例外行,把 dist 目录重新加回来**/temp—— 任意层级下名叫 temp 的文件或目录[abc]—— 字符类,方括号里任选一个字符\#note.md—— 开头的反斜杠是转义,匹配名字带井号的文件
gitignore 忽略文件夹与忽略单个文件差在哪
一句话回答:目录名后面加一个斜杠只忽略目录,不加斜杠则同名文件和目录都忽略,最前面再加一个斜杠只管仓库根目录下那一个,改成结尾带斜杠加星号则忽略目录里的内容、目录本身留着。
这是最容易写错、也最值得单独说清楚的一组对照。四种写法看着像,行为完全不同:
dist:任意层级下名叫 dist 的文件或目录都忽略,范围最大。dist/:只忽略目录,同名文件不受影响;Git 从此不再进入这个目录。/dist/:只忽略仓库根目录下那一个,子目录里的同名目录不受影响。dist/*:忽略目录里面的东西,但目录本身没被排除,所以后面的例外行还有机会生效。
最后一条正是「写了例外行却不生效」的解法。Git 不会进入一个已经被整体忽略的目录,也就不会去看里面还有没有例外规则;把父目录那条从只带斜杠的写法换成带星号的写法,例外行就活了。本页的路径匹配测试会直接告诉你是哪一级父目录、被哪一行挡住的。
模板分类总览:一共 52 个 gitignore 模板
模板库分 5 类:操作系统 3 个、编辑器 / IDE 8 个、语言 / 运行时 16 个、框架 / 构建工具 19 个、通用 / 其他 6 个,合计 52 个 gitignore 模板,勾哪几类就只合并哪几类的规则。
模板全部内置在页面里,不联网去任何模板站拉取,所以你的技术栈信息不会外传,模板站挂了也不影响使用。找 gitignore generator / gitignore template 的多半就是这类工具。下表的条数与典型模板都从数据表现算,复核于 2026-08-31。
| 分类 | 模板数 | 典型模板 | 英文别名 | 建议放哪 |
|---|---|---|---|---|
| 操作系统 | 3 个 | macOS、Windows、Linux | macOS gitignore、Windows gitignore、Linux gitignore | 建议放全局 |
| 编辑器 / IDE | 8 个 | VS Code、JetBrains(IDEA / WebStorm / PyCharm)、Vim、Emacs、Sublime Text | VSCode gitignore、IDEA gitignore、vim gitignore、emacs gitignore、sublime gitignore | 建议放全局 |
| 语言 / 运行时 | 16 个 | Node / npm、Python、Java、Go、Rust | Node gitignore、Python gitignore、Java gitignore、Go gitignore、Rust gitignore | 放仓库 |
| 框架 / 构建工具 | 19 个 | Next.js、React(Create React App)、Vue、Nuxt、Angular | Next.js gitignore、React gitignore、Vue gitignore、Nuxt gitignore、Angular gitignore | 放仓库 |
| 通用 / 其他 | 6 个 | 日志与临时文件、环境变量与密钥、测试与覆盖率报告、打包产物、大文件与媒体 | logs gitignore、env gitignore、coverage gitignore、build gitignore、large file gitignore | 放仓库 |
这是我们整理的常用集合,逐条标注了复核日期,不宣称收全了所有生态,也不宣称与任何第三方模板站逐字相同;缺的规则生成之后手动补一行即可。
gitignore 不生效的六个原因与排查办法
规则写了却没用,几乎都能落到下面这 6 条里。排查顺序是固定的:先用 git check-ignore -v 看到底是哪一行在起作用,没有任何输出就说明压根没规则命中;有输出但文件照样出现在 git status 里,那就是它早被跟踪了,得走 git rm --cached。
| 现象 | 原因 | 怎么办 |
|---|---|---|
| 写进 .gitignore 了,git status 里还是有它 | 这个文件已经被 git 跟踪了。gitignore 只管还没被跟踪的文件,对已跟踪文件完全无效 | 先 git rm --cached <文件>(目录加 -r)把它从索引里去掉,再提交一次。注意这只是不再跟踪,历史里仍然有;如果是密钥,请先轮换凭据 |
| 写了例外行,文件还是被忽略 | 它的父目录被整条规则整个排除了。Git 不会再进入被忽略的目录,里面的例外行根本没机会生效 | 把 dist/ 改成 dist/*(不排除目录本身),或先写 !dist/ 再写例外;用本页的路径匹配测试可以直接看出是哪一级父目录挡住的 |
| 某一行怎么改都不匹配,肉眼看不出问题 | 行尾有看不见的空格。Git 会把未转义的行尾空格丢掉,但你写的规则可能本来就靠那个空格 | 用 git check-ignore -v <路径> 看是哪一行在起作用;真要匹配结尾的空格,写成反斜杠加空格 |
| 第一条规则永远不生效,后面的都正常 | 文件开头带 UTF-8 BOM。BOM 会被算进第一条规则,让它匹配不上任何东西 | 用编辑器另存为「无 BOM 的 UTF-8」;本页的体检会直接把这种文件标出来 |
| Windows 上写的路径规则完全不起作用 | 用了反斜杠当路径分隔符。gitignore 只认正斜杠,反斜杠在这里是转义符 | 把 src\dist 改成 src/dist;本页体检会把疑似反斜杠路径的行标出来 |
| 按磁盘上的完整路径写了规则,一个都没匹配上 | 写成了绝对路径。gitignore 的路径永远相对 .gitignore 所在目录,不是磁盘路径 | 去掉盘符或家目录前缀,改成相对仓库根的写法;跑一次 git check-ignore -v 确认 |
三个忽略位置对照:仓库、exclude 与全局 gitignore
忽略规则可以写在三个地方,作用范围和会不会提交完全不同。编辑器与系统那类文件(.idea、.vscode、.DS_Store)属于个人习惯,最适合第三种;本工具的「拆出全局版」就是替你把这两类单独拆出来,并给出配置命令。
| 放哪 | 作用范围 | 会不会提交 | 怎么配置 | 适合放什么 |
|---|---|---|---|---|
| 仓库根的 .gitignore | 整个仓库,所有克隆它的人 | 会提交,跟着仓库走 | 放在仓库根目录,直接提交;子目录也可以各放一份,作用范围是所在目录及其子目录 | 项目产物与依赖目录:node_modules、dist、target、__pycache__ |
| .git/info/exclude | 只影响你本机的这一个仓库 | 不会提交,别人看不到 | 直接编辑 .git/info/exclude,语法与 .gitignore 完全一样 | 临时调试文件、你自己的草稿脚本,不想让队友看见也不想污染仓库规则 |
| 全局 gitignore | 你本机的所有仓库 | 不会提交,是你自己的机器配置 | 建一个文件(例如 ~/.gitignore_global),再执行 git config --global core.excludesFile ~/.gitignore_global | 编辑器与系统垃圾:.DS_Store、Thumbs.db、.idea、.vscode —— 这些是个人习惯,不该推给全队 |
规则体检覆盖的 15 条常见问题
把现有文件粘进来时会顺带跑一遍静态检查,按下表逐条标出问题,分必须改、注意、提示三级。它只解释问题、给出改法,不替你改写文件,也判断不了你的仓库里哪些文件已经被跟踪。
| 级别 | 判据 | 为什么要管 | 怎么办 |
|---|---|---|---|
| 必须改 | 文件以 UTF-8 BOM 开头 | BOM 会被粘进第一条规则,让它匹配不上任何东西,而且肉眼完全看不出来 | 用编辑器另存为「无 BOM 的 UTF-8」;本工具生成的文件一律不带 BOM |
| 必须改 | 出现会忽略整个仓库的规则 | 单独一行的星号或斜杠会把所有文件都挡在外面,多半不是你想要的 | 确认是不是想做白名单;真要白名单,请在后面用例外行把需要的路径逐条加回来 |
| 注意 | 例外行的父目录被整体排除了 | Git 不会进入被忽略的目录,里面的例外行没有机会生效 —— 这是「gitignore 不生效」最常见的一种 | 把父目录那条改成带斜杠星号的写法(不排除目录本身),或先写一条父目录的例外行 |
| 注意 | 写了目录加斜杠星号,而不是目录加斜杠 | 两者不等价:前者不排除目录本身,所以里面的例外行还能生效;后者会连目录一起排除 | 想让例外行生效就保持现在的写法;只想整个目录都不要,改成结尾只带一个斜杠 |
| 注意 | 路径里用了反斜杠 | gitignore 只认正斜杠,反斜杠在这里是转义符,Windows 风格的路径写法不会生效 | 把反斜杠改成正斜杠 |
| 注意 | 写成了磁盘上的绝对路径 | gitignore 的路径相对 .gitignore 所在目录,带盘符或家目录前缀的写法匹配不到任何东西 | 去掉前缀,改成相对仓库根的写法 |
| 注意 | 行尾有未转义的空格 | Git 会把未转义的行尾空格丢掉,这是最难发现的一类静默失效 | 删掉行尾空格;真要匹配结尾空格,在空格前加一个反斜杠 |
| 注意 | 忽略了环境变量或密钥类文件 | 写进 .gitignore 不会让已经提交过的文件消失,更不会从历史里删掉 | 先 git rm --cached 停止跟踪;如果这份凭据已经推上过远端,请直接轮换,删文件不等于删历史 |
| 提示 | 井号开头的行看起来像规则 | Git 把井号开头的整行当注释,你想忽略的那个文件其实没被忽略 | 要匹配井号开头的文件名,在井号前加一个反斜杠 |
| 提示 | 斜杠加两个星号加斜杠的冗余前缀 | 与直接写两个星号加斜杠等价,多出来的开头斜杠没有作用 | 删掉开头的斜杠,规则更好读 |
| 提示 | 文件里有完全重复的规则 | 重复本身不影响判定,但会让人以为改了一处就全改了 | 本工具合并时会去掉重复行;只有两次之间夹了例外行的才会原样保留 |
| 提示 | 忽略了锁文件 | 应用类项目一般应该提交锁文件,团队与 CI 才能装到同一份依赖 | 库类项目另有取舍,按团队约定决定;这条只作提醒,不替你改 |
| 提示 | 仓库规则里含编辑器或系统垃圾文件 | 这些是你这台机器的习惯,不是项目产物,写进仓库等于把个人偏好推给全队 | 用本工具的「拆出全局版」把它们挪到全局 gitignore,并执行 git config --global core.excludesFile |
| 提示 | 用了 POSIX 字符类 | 本工具的路径匹配测试不支持这种写法,该行在测试里不参与匹配 | 生成的文件本身不受影响;要确认这行的效果,请用 git check-ignore -v 验证 |
| 提示 | 整份规则里没有任何环境变量相关的行 | .env 这类文件通常不该进仓库,漏掉的代价是密钥泄漏 | 需要的话勾上「环境变量与密钥」模板;本工具只提醒,不会自动替你加 |