让.gitignore 默认忽略一切
.gitignore Everything by Default

我们都有过这样的经历:在项目中提交代码时,不小心把.DS_Store、node_modules 或 IDE 配置文件甚至环境变量也一起提交了。事后不得不尴尬地清理历史记录,把不该出现的东西从 Git 仓库中移除。为什么不换个思路?与其默认允许所有文件再手动忽略,不如默认忽略一切,只显式允许需要的文件。比如在一个简单的 Go 项目中,只需在.gitignore 中设置忽略所有文件,再单独放行.gitignore 本身、*.go 源文件、go.mod 和 go.sum 等关键文件。这样,只有你明确允许的文件才会被 Git 追踪,彻底杜绝误提交。虽然这种方法未必适合所有项目,但在本地文件日益繁杂的今天,它提供了一个值得尝试的替代方案。
HN 评论区
160- rcfox
这建议听起来不太靠谱。我很少会不小心提交多余的文件,但我绝对会忘记取消忽略那些我本该提交的文件。
如果你做初始设置时选择忽略一切,为什么不直接做初始设置来忽略那些常规文件呢?做一个模板,然后复制到所有仓库里。
- Brajeshwar
很奇怪,不少开发者给出的建议似乎都来自一个他们独自工作、没和足够多的人合作过、或者没参与过足够多项目的世界。
在这个案例中,`.gitignore_global` 就能处理他提到的那些常规嫌疑对象,比如 `.DS_Store` 文件、IDE 配置、压缩文件等等。即使出了问题,通常也会在初始脚手架阶段被抓住,那时关键文件还没加进去。
如果你在和新人、年轻或新手开发者合作,就给他们讲讲全局 gitignore、本地配置、dotfiles 这些典型知识。把你的配置分享给他们作为灵感或起点。
编辑:我知道我的 dotfiles 不是网上最好的,但这帮我轻松地在多台设备、多个身份(工作、项目、个人等)之间切换。我最近清理了一下,并用 Claude Code 添加了自动化、测试等功能。https://github.com/brajeshwar/dot
- isityettime
为什么不直接学会正确使用 `git add` 呢?你是非要一直狂按 `git add -A` 吗?让未提交的文件安静地待在本地工作树里,完全不需要折腾 .gitignore,这并不难。
- caseyw
我默认不忽略任何东西,只暂存我明确想要的文件。
我无法告诉你,有多少次我和别人结对编程时,对方直接说“git add .”,我每次都很困惑为什么选这么做。
我理解,但我见过因为“全加”引发的麻烦,远比“始终有选择地添加”要多。各有所好吧。
- flexagoon
> 其他垃圾文件(例如 CLAUDE.md)不应该出现在你的仓库里
CLAUDE.md/AGENTS.md 怎么就成了“不该在仓库里的垃圾”?如果你在项目中使用智能体,并为其设定了项目特定的规则,那你为什么不希望其他人在你的仓库中使用智能体时无法访问这些规则,从而写出更差的代码呢?
- kazinator
你使用的工具或工作流在底层盲目地为你执行“git add 所有文件”,所以你当然会主张忽略一切。其统一的主题就是:先操作所有东西,然后再想办法理清。
我参与过一些拥有多年历史、本地仓库里堆满未跟踪垃圾的项目,但我从未需要 .gitignore,也从未不小心添加并发布过任何东西。
- matthewmc3
我对“忽略一切”这招还不太信服,但我对 git 工作流做过的最好改变之一,就是在 ~/.config/git/ignore 里加上 `.*`,默认忽略所有点文件。
现在我的项目确实需要一套样板代码来取消忽略那些常见的文件(!.gitignore, !.gitattributes, !.github, !.editorconfig 等),但之后我随时可以在项目中扔进 .foo.lang 文件、.tmp/.cache 目录、Claude 助手用的 .code_analysis.md、.todos.txt 或者任何东西,而无需担心忘记管理 .gitignore 带来的后果。我惊讶于居然没更多人走这条路。
- yipinwong
非常具有安全工程师思维的做法。
我对 VPS 的做法是:先封锁所有端口,再一个个打开。
文件也是同样的思路。
我看到的唯一缺点是:知道该放行哪些文件。对于端口来说很简单,但文件扩展名可能五花八门。
应用程序/命令行工具等会创建你从未见过的扩展名,这可能会引发问题。
除此之外,我喜欢这个方法。