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