规则的执行顺序是从上到下的
过滤文件
若文件夹开头为/,则限定为根目录下
否则不论根目录与子目录
文件规则同样
*不会代表/符号
具体来说,此命令
/666/*2.txt
对666/777/2.txt无效
在GitKraken中
/
是无效的,必须要带*
对文件夹下的文件进行过滤
666
666/
666/*
都有效
已经同步的文件不受过滤规则的影响,在修改后依然会被同步
不过滤特定文件
在GitKraken中
不过滤666中的2.TXT文件写法如下
/666/*
!/666/2.txt
若不加*,则不过滤命令无效
/666/
!/666/2.txt
即使设置了不过滤,也会被过滤掉
所以最佳方式为,写*
/*
!.gitignore
!*2.txt
此命令无法保护子目录下的2.txt
即使写的很具体也不行
!/*/2.txt
!/666/2.txt
上面两种方法都不行
奇怪的现象
在GitKraken中
现有666文件夹和777文件夹
666文件夹都包含了1.txt,2.txt
但是777同步了,666未同步
此时
/*
!.gitignore
!1.txt
!2.txt
只会同步777文件和根目录下的1,2.txt
而666目录不会被同步
更进一步
/*
!/666/*
不能同步666的所有文件
但是
/*
!/666/
可以,迷惑!
/*
!/666
也可以
注意
目录以/结尾
星号(*)匹配零个或多个任意字符;
[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
问号(?)只匹配一个任意字符;
结论
/*
!xxx
慎用