TortoiseSVN 排除项的匹配模式

我比较常用的 TortoisSVN 全局排除项的匹配模式有:artifacts build */log/* .git .vs .svn cgi-bin *.pdb bin obj *.user *.suo *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__ *.rej *~ #*# .#* .*.swp .DS_Store [Tt]humbs.db

其中,单独的一个log表示匹配所有的 log 目录(目录即文件夹),以及所有名为log且无扩展名的文件。

如果想排除某个项目下的 log 目录下的所有文件,正确的匹配模式应该是 */log/*,而不是简单的 log/log/*,因为 SVN 是从【进行 Add 操作的路径】开始匹配的,如果【进行 Add 操作的路径】下没有 log 目录,那么肯定就匹配不上。如果有 log 目录,那么肯定就匹配上咯???

答案是错!如果【进行 Add 操作的路径】下有 log 目录,那么当你全选进行【Add】操作时,SVN 会认为【你想把 log 也作为添加项的一部分】,所以它会同样会把当前【进行 Add 操作的路径】下的所有 log 目录及其下面的所有文件都包含进来。虽然你可以手动把 log 目录的勾去掉,但是这样一来排除项的模式匹配功能就无用了。

一般来说,我们之所以会用到模式匹配,最常见的情况是当我们想把已有的项目(多个目录)添加到 SVN,而又不想包含当前【进行 Add 操作的路径】的 子目录 里面的某些文件或目录时。如果我们手动一个个的去排除,而且项目文件多,那就是很痛苦的事情。

所以当我们把模式匹配改为 */log/* 之后,再返回至 log 目录的父目录,然后进行【Add】操作,此时你就会发现只包含了 log 目录,而 log 目录下的所有文件都被排除了。

模式*/log/*包含了 log 目录,那如果我连 log 目录都不想包含呢?那么很好办,直接log*/log就行。

如果想指定排除某种特定类型的文件,可以类似*/log/*.txt这样的模式。其模式匹配字符与正则表达式几乎一样,按照正则表达式来指定模式一般不会有错。更多的模式匹配可观看这里: Pattern Matching Notation

除了全局设置之外,我们还可以进入某一个已经【SVN Checkout】过的目录,然后依次做如下操作也可设置排除项。

图 1
图 2
图 3
图 4
图 5