.gitignore

416 阅读3分钟

如果你的项目中有些文件不需要纳入到 git 的版本控制中,可以在 git 仓库中添加 .gitignore 文件,并在里面填写在这个项目中需要忽略的文件

作用范围

.gitignore 文件的作用范围是当前 git 仓库,如果想在所有项目中都忽略某些文件,可以 使用 git config core.excludesFile 文件路径 指定使用哪个文件作为全局忽略的配置

优先级

优先级以当前 git 仓库中的 .gitignore 文件为主,.gitignore 文件中没定义的,再以全局配置为主

语法

  • # :井号开头的为注释
  • * :星号匹配多个任意字符
  • ? : 问号匹配一个任意字符
  • [] : 中括号匹配单个字符
  • ! : 概叹号表示否定,如果需呀排除大量文件,先可以排除所有文件,然后再把部分文件包含进来,如果要匹配以 ! 开头的文件,请在第一个 ! 前面加(反斜杠)
  • / : 斜杠表示目录分隔符,/出现的位置会影响/的作用
    • /出现在开头或中间,此时不管结尾是否有斜杠,都是从 .gitignore 文件所在路径为起始目录向下查找,例如 /target/classes/、/target/classes 、target/classes/、target/classes 他们虽然写法不同但是含义都一样,都是匹配 .gitignore 文件同级目录中 target/classes 目录
    • /只出现在结尾,在 git 仓库中的任意路径下匹配,例如 classes/,只要当前 git 仓库中有该目录,不管在什么路径下,都能匹配上(跟 .gitignore 文件所在路径无关)
    • 不含斜杠,在 git 仓库中的任意路径下匹配,既匹配目录、也匹配文件(含斜杠的一定是匹配目录,不含既匹配目录、也匹配文件)例如 classes,只要当前 git 仓库中有该目录或该名称的文件,不管在什么路径下,都能匹配上
  • ** : 连续的两个星号与/搭配时有特殊的含义,**出现的位置会影响 ** 的作用
    • **出现在开头并且结尾不带 / :在 git 仓库中的任意路径下匹配,既匹配目录、也匹配文件。例如 **/foo/bar , 只要当前 git 仓库中任意位置存在 target/classes 目录或 target 目录下有名为 classes 的文件就能匹配上
    • **出现在开头并且结尾带 / :在 git 仓库中的任意路径下匹配,只匹配目录。例如 **/target/classes/ , 只要当前 git 仓库中任意位置存在 target/classes 目录
    • ** 出现在中间并且结尾不带 / : 从 .gitignore 文件所在路径为起始目录向下匹配文件或目录,中间的 ** 表示可以跨0到多个层级。例如 target/**/classes 、/target/**/classes 都是匹配 .gitignore 文件同级目录中 target 目录下零到多层目录下的 classes 文件或目录, 比如 target/classes、target/a/classes 等
    • ** 出现在中间并且结尾带 / :作用于 ** 出现在中间并且结尾不带 / 差不多,只是不匹配文件
    • ** 出现在结尾,作用跟/出现在开头或中间一样。例如 /target/classes/、/target/classes 、target/classes/、target/classes、 /target/classes/** 、target/classes/** 他们虽然写法不同但是含义都一样,都是匹配 .gitignore 文件同级目录中 target/classes 目录

使用

强烈建议不要设置全局忽略文件,然后为每个 git 仓库创建 .gitignore 文件

.gitignore 文件没有必要手写,github 上都有整理好的各种编程语言、项目环境下的 .gitignore 模板,下载下来直接用,还有缺失的再手动加