Go to comments

平时记录 2025

.gitignore 的匹配规则

该文件用于排除 Git 跟踪的文件


1. 直接写名字

排出所有名字为 dist 的目录或文件,而且不管目录有多深,比如 /a/dist 也会被排除

dist

|- project

  |-a

  |  |- dist  被排除

  |

  |- dist  被排除


2. 加 / 斜杠

斜杠在开头,

表示当前目录下对应的目录或文件( 当前目录就是 .gitignore 所在的目录

/dist

|- project

  |-a

  |  |- dist 不会被排除

  |

  |- dist 根目录下的 dist 会被排除


斜杠在中间,

表示从当前目录出发,在 a 目录下的 dist 会被排除

a/dist

|- project

  |-a

  |  |- dist  被排除

  |

  |- dist  不会被排除


斜杠在末尾,

跟直接写 dist 查不多,且不管目录的深度,唯一的不同的是排除的是目录,不包括文件

dist/


3. * 通配符

* 匹配 0 个到多个字符,但不包括 / 斜杠

比如排除掉一些日志文件,无论那个目录下面的日志文件都会被排除

*.log

|- project

  |-a

  |  |- 2.log 被排除

  |

  |- 1.log 被排除


* 通配符和一些规则联合使用,比如只排除 logs 目录下所有 .log 文件

logs/*.log

|- project

  |-logs

  |  |- 2.log 被排除

  |

  |- 1.log 不会被排除


两个星号 **,

一个 * 不匹配斜杠,它只排除 Logs 目录下的子文件,

两个 ** 星号,可以匹配任何字符,同时也可以匹配斜杠,可以排除目录了

比如排除 logs 目录下面所有的 .log 文件,不管目录有多少深

logs/**/*.log

|- project

  |-logs

  |  |- sub

  |  |  |- 3.log 被排除

  |  |

  |  |- 2.log 被排除

  |

  |- 1.log 不会被排除


4. ? 号

只匹配名字是一个字符的 .log 文件,

比如 2.log 可以被排除,如果两个数字 31.log 就不能被排除

logs/**/?.log

|- project

  |-logs

  |  |- sub

  |  |  |- 31.log 不能被排除

  |  |

  |  |- 2.log 被排除

  |

  |- 1.log 不会被排除


如果两个 ?? 号匹配两个连续的字符


5. [] 中括号里写具体的匹配规则,也只匹配一个字符,

比如 [0-9] 表示匹配一个字符,同时必须是数字,a.log 不是数字不能被排除

logs/**/[0-9].log

|- project

  |-logs

  |  |- sub

  |  |  |- 31.log  不能被排除

  |  |

  |  |- 2.log  被排除

  |  |- a.log  不能被排除

  |

  |- 1.log  不会被排除


6. ! 感叹号,表示在前面的基础上,排除一些

比如,不跟踪 upload 目录下面所有用户上传的东西,不管目录有多深全部移除

/upload/**/*.*

|- project

  |-upload

    |- sub

    |  |- 1.zip

    |

    |- 1.jpg


但是这样会出一个问题,

由于 upload 下面全部被移除了,远程仓库那边不会建立这个 upload 目录,服务器那边可能会出一些问题,

常见的做法是在 upload 目录下面建立一个 .gitkeep 文件,文件名可以随意命名,习惯上用 gitkeep

|- project

  |-upload

    |- sub

    |  |- 1.zip

    |  

    |- .gitkeep  该文件的目的是不要被排除,远程仓库就要建立 upload 目录

    |- 1.jpg


这样 upload 目录下面除了 .gitkeep 以外全部被排除了,.gitkeep 起到了远程仓库建立 upload 目录的作用

/upload/**/*.*
!/upload/.gitkeep


一般在 .gitignore 的最后一行写上 !.gitkeep,保证在前面规则的基础上 .gitkeep 不会被排除

/upload/**/*.*
!.gitkeep







Leave a comment 0 Comments.

Leave a Reply

换一张