.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
大家觉得这个设计是合情合理的,还是反人类的呢?
我将挑战的答案放在了评论区,欢迎参与讨论。👇
评论