Extra02 - Ignore - 配置忽略的档案与目录

此篇为番外,未收入在本篇是因为 Ignore 并不是个工具,而是个会常被各种工具采用的一种配置方式。

Ignore 档案用来排除匹配的档案。

介绍 ignore 档案

Ignore 档案使用特定格式与通用字元来排除不想被特定工具处理的档案或目录。

以 git 的 .gitignore 为例,只要符合 ignore 档案的设定,就会被 git 视为不用追踪的档案:

# Ignore any js file in directory `sample` with any depth
samples/**/*.js

如果在当前目录中有个 .gitignore 的内容如上,那当前目录内的 samples 目录里的任何阶层目录中以 .js 结为的档案或目录都会被排除在 git 的追踪清单内。

Ignore 档案的规则

每个工具在规定 ignore 档案的规则时或多或少都有点不同,但主要都以 .gitignore 的规则处理,因此这里会说明 .gitignore 的规则,使我们对於 ignore 档案的规则有个认识。

规则列表如下:

  • 所有的空行都不会匹配任何档案,可以将空行作为分隔以提高可读性。
  • # 作为行开头视为注解行,如果需要包含以 # 开头的档案或目录,可以使用 \ 跳脱。例如: \#foo 会匹配 #foo 目录或档案。
  • 行中的空白会被忽略,以 \ 表示不忽略。例如: f\ o\ o 会匹配 f o o 目录或档案。
  • ! 作为行开头会被视为不要忽略的档案或目录,如果要忽略以 ! 开头的档案或目录,需要以 \ 跳脱。例如: !.gitignore 会将 .gitignore 档案或目录排除在忽略清单中,另外像是 \!important!.txt 则会将 !important!.txt 包含在忽略清单中。
  • 斜线 / 作为目录区隔符号。
    • 在开头或是中间(或是开头与中间都)设定 / ,则会只会搜寻与 .gitignore 同层的目录。例如: /foo 会对应 foo ,但不会对应 a/foo ,另外 foo/bar 会对应 foo/bar 但不会对应 a/foo/bar
    • 在结尾设定 / 则会寻找任意层的目录,不会寻找档案。例如 foo/ 只会搜寻目录 foo 不会包含档案 foo
  • * 与除了 / 外的所有字串相符。例如 *.js 会符合任意以 .js 结尾的档案或目录,另外 foo/* 会匹配目录 foo 中所有的档案及目录。
  • ? 与除了 / 外的所有字元相符。例如 ?.js 符合 a.js 但不符合 sample.js
  • [a-zA-z] 是范围符号,与范围设定的相符。例如 [a-c].js 符合 b.js 但不符合 d.js
  • ** 依照摆放位置有不同的效果:
    • ** 後接着 / 表示任意层目录。例如 **/foo 符合 fooa/foo
    • / 後接着 ** 并且位於尾端,表示此目录下的所有档案及目录。例如 foo/** 会包含 foo 中所有的档案及目录,但不会包含 a/foo 的内容。
    • 位於两个 / 之间摆放 ** 表示中间夹着零至多个目录。例如 foo/**/sample.js 符合 foo/sample.jsfoo/bar/sample.jsfoo/bar/a/sample.js
    • 其他数量的 * 相连都依上列规则。
  • 行中没有设定 / 则会找寻所有层级目录中是否有符合的档案及目录。例如: foo 会符合 /fooa/foo

本文重点整理

  • 每个工具都会需要制定其包含的档案范围,虽然可以设定预设范围,但不可能符合每个人的需求,因此就需要一个可以制定处理范围的功能。
  • Ignore 档案以简单的格式搭配通用字元来表示各式的处理范围,让使用者可以精细地客制想要作用的范围。
  • 大多数的 ignore 档案都是依照 .gitignore 规格,因此理解了 .gitignore 写法,就可以知道大部分的 ignore 档案设定方式。
  • Ignore 档案的设计,让我们可以缩减各个工具的处理范围,以达到更好的效率。

参考资料


<<:  Day31 - 【概念篇】Open-ID Connect & Social Login(2)

>>:  Java 开发 WEB 的好平台 -- Grails -- (1) 认识/安装 Grails

LeetCode 6. Zigzag Conversion

Zigzag Conversion Medium The string "PAYPALI...

关於code signing [程序码签章] 这档事 ...

所谓的程序码签章,就是一个指一个数位的签章,在编译好的软件上签章。软件一旦被重新编译、修改,上面的签...

成员 10 人:半夜加班,毛骨悚然的诡故事

人员终於跨入两位数,虽然只是个不明显的里程碑; 但也准备从「求生存」往「求发展」的路程前进。 这时候...

Day 17 : 用於生产的机械学习 - 特徵选择 Feature Selection

特徵选择是机器学习中的核心概念之一,不相关或部分相关的特徵会对模型性能产生负面影响,也会有效能的问题...

Day62 (Vue)

1.computed & Watch Part_1 > Lab_Binding >...