.gitignore 文件
.gitignore 是 Git 版本控制系统中用于定义忽略规则的配置文件。该文件通常放置在项目的根目录下,也可以放置在子目录中以对特定目录应用忽略规则。Git 在执行 add、status、diff 等命令时,会自动读取 .gitignore 中的规则,将匹配的文件和目录排除在版本控制之外。每行定义一条规则,以井号 # 开头的行被视为注释,空行会被忽略。规则支持通配符和路径模式匹配。
星号(*)通配符
星号是 .gitignore 中最基本的通配符,用于匹配当前目录层级中的任意字符序列(不包含路径分隔符)。例如,规则 *.log 会匹配所有以 .log 结尾的文件,如 error.log、debug.log 等。但需要注意的是,* 不会跨越目录层级匹配,即 *.log 只匹配当前目录下的 .log 文件,不会匹配 subdirectory/error.log。要实现跨目录匹配,需要配合双星号使用。
双星号(**)通配符
双星号是 .gitignore 中功能最强大的通配符,用于匹配任意数量的目录层级。它有三种常见用法:出现在路径开头时(如 **/foo),表示匹配任意目录下的 foo 文件或目录;出现在路径中间时(如 foo/**/bar),表示匹配 foo 目录下任意深度的 bar 文件;出现在路径结尾时(如 foo/**),表示匹配 foo 目录及其所有子目录和文件。双星号的引入使得 .gitignore 规则能够灵活地处理复杂的目录结构。
问号(?)通配符
问号用于匹配单个任意字符。与星号不同,问号只能匹配一个字符位置。例如,规则 doc?.txt 可以匹配 doc1.txt、docA.txt 等,但不会匹配 doc12.txt(因为问号只匹配一个字符)。问号在需要精确控制字符数量的场景中非常有用。
方括号([abc])字符集合
方括号用于匹配括号内包含的任意单个字符。例如,规则 [abc].txt 可以匹配 a.txt、b.txt 或 c.txt,但不会匹配 d.txt。字符集合还支持范围表示法,如 [0-9] 匹配任意数字,[a-z] 匹配任意小写字母,[A-Z] 匹配任意大写字母。字符集合也可以与问号和星号组合使用。
感叹号(!)取反规则
感叹号用于否定之前的忽略规则,即强制追踪某些原本被忽略的文件。取反规则的前提是父目录已经被忽略。例如,如果规则先忽略了 docs/ 目录,然后使用 !docs/important.md 强制追踪该文件,那么 docs 目录下的其他文件仍会被忽略,只有 important.md 会被追踪。取反规则在需要忽略整个目录但保留其中特定文件的场景中非常实用。
斜杠(/)路径分隔符
斜杠在 .gitignore 规则中有两种含义。作为路径分隔符时,它用于分隔目录层级。当斜杠出现在规则末尾时(如 build/),表示该规则只匹配目录而不匹配文件。当斜杠出现在规则开头时(如 /build),表示该规则只匹配项目根目录下的 build 路径,不匹配子目录中的同名路径。不带斜杠的规则(如 build)则会匹配任意层级的 build 文件或目录。
注释行
以井号 # 开头的行在 .gitignore 中被视为注释,Git 会完全忽略这些行的内容。注释用于为规则添加说明和文档,提高 .gitignore 文件的可读性。如果需要在规则中包含以 # 开头的文件名,需要使用反斜杠转义:\#important.txt。良好的注释习惯有助于团队成员理解 .gitignore 规则的意图。
已追踪文件(Tracked Files)
已追踪文件是指已经被 Git 纳入版本管理的文件,即曾经通过 git add 添加到暂存区或通过 git commit 提交到仓库的文件。.gitignore 规则只能阻止未追踪的文件被添加到暂存区,对已追踪的文件没有效果。如果一个文件已经被追踪,即使在 .gitignore 中添加了对应的忽略规则,该文件仍然会出现在 git status 的输出中。要忽略已追踪的文件,需要先使用 git rm --cached 命令取消追踪。
git check-ignore 命令
git check-ignore 是 Git 内置的命令行工具,用于检测文件是否会被 .gitignore 规则忽略。使用 git check-ignore -v filename 命令可以查看匹配的规则及其在 .gitignore 文件中的行号。这个命令在排查 .gitignore 问题时非常有用,它可以帮助用户确认是哪条规则导致了文件被忽略或未被忽略。本工具的测试结果与 git check-ignore 的输出保持一致。
UD5工具箱