平时记录 2025
1、.gitignore 的匹配规则
.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
by:https://www.bilibili.com/video/BV1dkr3YMESN/
2、取整的区别
随机数函数里面,为什么要必须要用 Math.floor 取整呢?
function getRandom(x, y){ return Math.floor(Math.random() * (y - x) + x); }
parseInt 跟 Math.floor 的区别
parseInt 含义是向0取整,数轴的取整方向是 0
Math.floor 含义是向下取整,数轴方向是 -3
-3, -2.5, -2, -1, 0, 1, 2, 2.5, 3
当取整的数字 2.5 是正数,这两个方法的方向是一致的,因此结果都是 2
如果是负数 -2.5
-3, -2.5, -2, -1, 0, 1, 2, 2.5, 3
parseInt 向0取整,结果是 -2
Math.floor 向下取整,结果是 -3
比如,
产生随机范围是 -5 ~ 0 之间,0 是取不到的(因为 Math.random 产生的随机数范围是 [ 0, 1 ),1 是取不到的)
function getRandom(x, y){ return Math.random() * (y - x) + x; } const result = getRandom(-5, 0); console.log(result); console.log(Math.floor(result));
使用 Math.floor 取整的范围,从 -5 到 -1 每个数字的几率是一样的
-5, -4, -3, -2, -1, 0
-5 ~ -4 之间向下取整 -5
-3 ~ -2 之间向下取整 -3
-2 ~ -1 之间向下取整 -2
-1 ~ 0 之间向下取整 -1,0 取不到
parseInt() 是向 0 取整,
必须只有 Math.random 刚好为 0 的时候,经过该表达式的计算 Math.random() * (y - x) + x 才能取到 -5,极小几率才能出现
0 - -5 = -5
0 * -5 = 0
0 + -5 = -5
Math.round 是四舍五入,两头的几率小,中间的几率大,也不合适取整
by:https://www.bilibili.com/video/BV1Uw411i7s1/