.gitignore 的一个反人类设计

小麦2025年05月14日578 字

揭示 .gitignore 的反直觉设计,帮你避开常见"坑"。

前段时间从 Github 上拉了 MDN 文档,想利用 Cursor 完成一些文档分析任务。

git clone https://github.com/mdn/translated-content

这个项目包含多国语言,文件较多且目录结构比较深。我需要分析的文档在 files/zh-cn/web/ 目录下。

为了让 Cursor 的上下文干净一些,我需要配置 .cursorignore 文件,忽略所有文件夹,但保留 files/zh-cn/web/ 目录。

.cursorignore 遵循 .gitignore 的规范,因此我编写的排除规则按照日常写 .gitignore 的方式即可。

写了半天发现怎么也写不对,*! 的排列组合都试过了,依然不对,AI 绕了半天把自己绕晕了。

*
!docs/files/zh-cn/web/

不妨来挑战一下我当时遇到的难题:

🏆 挑战:忽略所有文件夹,但保留 docs/files/zh-cn/web/
.gitignore 规则
文件结构
docs
files
es
ja
ru
zh-cn
games
glossary
web
webassembly
zh-tw
docs2

如果你没写出来,那么可以接着往下看。

经过一番搜索,在 Stack Overflow 上找到了答案。

核心原因在于:

也就是说,如果你要使用 ! 来保留某个文件,那么这个文件的 直接父目录 必须也被保留,否则无法生效。

对应的 .gitignore 规范在 Git 官方文档 中可以找到。

举两个例子,下面这段规则无法保留 docs/files/ 目录,因为它的上级 docs 已经被忽略了。

.gitignore 规则
文件结构
docs
files
docs2

但是这段规则可以保留 docs2/,因为 * 并没有作用于它的上级。

.gitignore 规则
文件结构
docs
files
docs2

大家觉得这个设计是合情合理的,还是反人类的呢?

我将挑战的答案放在了评论区,欢迎参与讨论。👇

评论

你需要先登录才能发表评论
avatar
#1 小麦1 个月前四川
挑战的参考答案是: * !docs !docs/files !docs/files/zh-cn !docs/files/zh-cn/web
avatar
#2 shifei5201 个月前新加坡
受教了
Made by 捣鼓键盘的小麦 / © 2025 Front Talk 版权所有