《星际海关:.gitignore 之终极通关指南》

序章:海关的铁律

你是一名刚刚上任的星际海关总署署长(User)。你的职责是制定一本《违禁品查验手册》(.gitignore),指挥手下的机器人检查员(Git),决定哪些东西可以被装上飞往“GitHub 星”的货运飞船。

机器人检查员虽然执行力超强,但脑子是一根筋。他只会死板地从上往下读你的手册,并且严格遵守两条底层逻辑:

  1. 后来者居上: 如果第 1 条说“不准带酒”,第 100 条说“茅台可以带”,他会听第 100 条的。(后写的规则覆盖先写的)。
  2. 封门不进: 如果你封锁了一个房间,他连门都不会开,房间里就算有特赦的宝贝,他也看不见。(性能短路机制)。

第一章:初级禁令(基础匹配)

飞船即将起飞,你开始在手册最顶端写下第一批禁令:

# 1. 任何叫 temp 的东西都丢掉
temp
# 2. 任何 .log 结尾的日记本都丢掉
*.log

机器人开始工作:

  • 他看到客厅桌上的 temp 苹果,丢掉。
  • 他看到卧室里的 temp 椅子,也丢掉。(没有斜杠,匹配所有层级)。
  • 他看到哪里有 .log 本子,统统丢掉。

第二章:锚定之锚(根目录匹配)

你发现机器人把厨房(build/)里的垃圾丢了,但同时也把邻居家借放在门口的建材(也是 build)给丢了。你只想丢掉你自己家门口的那个 build 文件夹。

于是你修改规则,加了一个“锚”:

# 3. 只丢掉大门口玄关处的 build 文件夹
/build/

机器人看了一眼:

  • 把门口的 /build/ 封锁了。
  • 看到二楼有个 src/build/,他放行了。(斜杠在开头,只匹配根目录)。

第三章:封门的代价(目录短路陷阱)

你有个大仓库叫 logs,里面全是垃圾,但唯独有一份 error.log 是关键证据,必须带走。

你自信地写下:

# 4. 封锁 logs 仓库
logs/
# 5. 拿着特赦令,去 logs 仓库里把 error.log 拿出来!
!logs/error.log

结果,机器人两手空空回来了。 你大怒:“特赦令没看见吗?!” 机器人委屈地说:“长官,第 4 条您让我封锁 logs/。我看到门上贴了封条,我就没进去啊!我没进去,怎么可能找得到里面的 error.log?”

教训:一旦封门,里头没救。

你赶紧修正指令,只清空内容,不锁大门

# 4 (修正版). logs 仓库门开着,但里面的东西默认都是垃圾
logs/*
# 5. 唯独这个 error.log 是宝贝
!logs/error.log

这次,机器人进去了,把垃圾清空,唯独留下了那份证据。


第四章:权力的游戏(顺序与优先级)

最后,到了最棘手的 ARM_JLINK 贵族庄园。 这里有一个复杂的冲突:

  1. 根据第 2 条全局禁令,所有 *.bin (二进制文件)都是垃圾。
  2. 但是,ARM_JLINK 庄园里的 *.bin 是珍贵的启动核心。

你必须利用**“后来者居上”**的规则来反转局势。

错误示范(先救后杀):

# 错误!写在第 2 条之前
!ARM_JLINK/**/*.bin
*.bin

机器人:“长官,虽然您先说了要留着庄园里的 bin,但您最后又说所有 bin 都是垃圾。我听最后那句。” —— 核心被丢弃,任务失败。

正确示范(先杀后救):

# 第 2 条(早已写好): *.bin 是垃圾
 
# ... 手册的最后面 ...
 
# 6. 全局禁令虽然生效,但在 ARM_JLINK 领地内,我要行使特权!
!ARM_JLINK/**/*.bin

机器人:“明白!虽然 *.bin 是违禁品,但对于 ARM_JLINK 庄园下的所有房间(/**/),只要看到 .bin,我都会依据最新的第 6 条指令,将其放行!”


终章:海关署长的四句真言

飞船顺利升空,你看着远去的背影,在笔记本扉页写下了毕生所学的四句真言,传给下一任署长:

  1. 先泛指,后特指: 大范围的禁令写上面,特殊的豁免写下面。(顺序原则)
  2. 想锚定,加斜杠: 想精准定位大门口,前面加个 /。(根目录原则)
  3. 救文件,别救门: 只要目录被封死,里面的特赦令就是废纸。要用 dir/* 代替 dir/。(短路原则)
  4. 搜深处,双星号: 想救深层文件,用 /**/ 穿透所有子目录。(递归原则)