理解 .gitignore 文件中的通配符使用和忽略规则

183 阅读2分钟

一. 通配符

在 .gitignore 文件中,通配符用于匹配文件和文件夹的名称,以控制 Git 忽略哪些文件或文件夹。下面是一些常用的通配符的使用示例:

  • *:匹配零个或多个字符。

    • 例如,*.txt会匹配所有以.txt结尾的文件。
  • ?:匹配一个字符。

    • 例如,test?.txt会匹配 test1.txttest2.txt,但不会匹配 test12.txt
  • **:匹配零个或多个目录。

    • 例如,logs/**/*.log会匹配 logs/a/b/c.loglogs/x/y/z.log等。
  • /:指定路径。

    • 例如,/logs/会匹配根目录下的 logs 文件夹,但不会匹配 src/logs
  • !:否定模式,表示不忽略某些文件或文件夹。

使用通配符的一些示例:

  • 忽略所有的 .txt 文件:

    *.test
    
  • 忽略某个特定文件夹下的所有文件:

    path/to/folder/
    
  • 忽略所有以 .log 结尾的文件,但不包括 test.log

    *.log
    !test.log
    
  • 忽略某个文件夹及其子文件夹下的所有 node_modules 文件夹:

    node_modules/
    

需要注意的是,.gitignore 文件可以放在项目的根目录下,也可以放在特定的子目录下,它会对该目录及其子目录生效。

二. .gitignore 中常用的忽略规则

.gitignore 是一个用于配置 Git 版本控制系统忽略指定文件或目录的规则文件。它可以用来排除不需要提交到代码仓库中的临时文件、编译产物、个人敏感信息等。下面是通配符的使用:

可以使用通配符来匹配多个文件或目录。常用的通配符有:

*.txt         // 忽略所有以.txt结尾的文件
build/        // 忽略根目录下的build目录
tmp/*.log     // 忽略tmp目录下所有.log文件
test/**/*.tmp // 忽略test目录及其子目录下的所有.tmp文件
/.vscode      // 忽略根目录下的.vscode目录
!src/foo.txt  // 不忽略根目录下的src目录下的foo.txt文件

文件类型模板:

Git 提供了一些常见文件类型的模板,可以直接使用,例如:

*.html     // 忽略所有HTML文件
*.o        // 忽略所有目标文件

可以在.gitignore文件中使用这些模板,避免重复配置。

模式的优先级:

.gitignore 文件中的模式按照 从上到下的顺序逐条匹配,如果遇到匹配的模式,则后面的模式不再生效 。如果要取消对某个文件的忽略,可以使用!前缀特别指定。

需要注意的是,已经被Git跟踪的文件不会受到 .gitignore 的影响。要忽略已经被提交的文件,可以使用 git rm --cached <file>命令将其从版本控中移除,例如:

git rm -r --cached .vscode/

这条命令会从 Git 的索引中移除 .vscode 文件夹中的所有文件,但不会删除本地文件。