5.11. 忽略文件和目录

图 5.24. 未受版本控制的文件之资源管理器上下文菜单

未受版本控制的文件之资源管理器上下文菜单

在多数项目中你总会有文件和目录不需要进行版本控制。这可能包括一些由编译器生成的文件,*.obj,*.lst。或许是一个外部的用于存放可执行程序的目录。只要你提交变更,TSVN就会在提交对话框的文件列表中列表显示出你的未版本控制文件。当然你可以关闭这个显示,不过你可能会忘记添加新的版本文件。

最好的避免类似问题的方法是添加参考文件到该项目的忽略列表。这样他们就永远不会出现在提交对话框中,而真正的未版本控制文件则仍然列出。

如果你右键一个单独的未版本控制文件,并从菜单栏选择TortoiseSVN(加入忽略列表)Add to Ignore List,会出现一个子菜单允许你仅选择该文件,或者所有具有相同后缀的文件。如果你选择多种文件,那么就没有子菜单了,你仅能添加这些特定的文件/目录。

如果你想从忽略列表中移除一个或多个条目,右击这些条目,选择TortoiseSVN从忽略列表删除。你也可以直接存取目录的svn:ignore属性。它允许你使用文件匹配来指定多个模式,这在下面的章节叙述,阅读第 5.15 节 “项目设置”获得更多关于直接设置属性的信息。请注意每个忽略模式占一行,不支持使用空格分割。

[提示]全局忽略列表

另一个忽略文件的方法是添加这些文件到global ignore list .他们最大的不同是全局忽略列表是一个客户端特性。它会作用到 所有的(all)subversion 项目。但只能在pc客户端使用。在全局尽可能更好的使用svn:ignore特性,因为他能够应用到特殊的项目区域,并却他作用于所有检出该项目的人。阅读第 5.27.1 节 “常规设置”获得更多信息。

[提示]忽略已版本控制的条目

已版本控制的文件或目录不能够忽略,这是subversion的一个特性。如果你错误的版本控制了一个文件,阅读第 B.8 节 “忽略已经版本控制的文件”介绍怎样“取消版本控制(unversion)”。

5.11.1. 忽略列表中的模式匹配

Subversion 的忽略模式使用了文件匹配,一种原先在Unix系统中使用meta字符作为通配符的技术。下面的字符有着特殊的意思:

*

匹配任何字符串,包括空串(没有字符)

?

匹配任何单字符

[...]

匹配任何单在方括号[]内的单字符,在方括号内,一对字符被“-”分隔,匹配任何词汇表(lexically)上在他们中间的字符。例如[AGm-p]匹配任何但个的A,G,m,n,o或者p

Subversion 在所有内部路径名称中使用 / 作为路径分割符,所有模式匹配都使用这种路径名称风格。如果你想在忽略模式中使用路径分割符,确认使用 /, 而不是 Windows 的反斜线符号。

模式匹配是大小写敏感的,这在windows平台下会出问题。你可以要比较的字符硬性的强制忽略大小写。例如,忽略不记*.tmp的大小写。那么你可以使用像*.[Tt][Mm][Pp]这样的模式。

Subversion 对每个路径使用这种匹配模式。这些路径通常相对于执行导入,增加,提交等动作的目录。因此,此匹配模式考虑在文件名称之前可能有,也可能没有路径组件这个事实。

如果目录名称在路径中,匹配算法不会删除它们,所以模式Fred.*匹配Fred.c,但是不匹配subdir/Fred.c。这对于你添加一个包含你想忽略的一些文件的目录来说是非常有意义的,因为在 Subversion 处理忽略模式时,这些文件名的优先级高于目录名。

在模式匹配中,/ 字符不会做任何特别处理,所以模式 abc*xyz 匹配 abcdxyz,但是不匹配 abcdir/subdir/anything/morexyz

你应该指定一个*CVS或者更好的CVS */CVS模式中的任意一个来忽略所有的CVS目录。执行第一个选择也将会排斥一些像ThisIsNotCVS这样的命令。而单独使用*/CVS又不能作用在一个紧跟着CVS的子目录上,而且单独的CVS 不能作用在子目录上。

如果你想要定义一个特殊的忽略规则。你可以在关于shell命令行语言的IEEE规范中找到Pattern Matching Notation