忽略文件和目录

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

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

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

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

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

如果你想从忽略列表中移除一个或多个条目,right click 右键该条目并选择TortoiseSVNRemove from Ignore List你也可以直接通过目录的svn:ignore特性。他允许你指定多个文件名段的通用样式,来部分的描述。阅读“项目设置”一节立即获得更多关于设置道具的信息。

全局忽略列表

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

忽略已版本控制的条目

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

忽略(Ignore)列表中的文件匹配

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

*

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

?

匹配任何单字符

[...]

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

Subversion 执行这样的匹配,所以定界符为/,而不是windows下的\

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

如果当前路径的目录名作为模式出现在匹配中,这个模式Fred.*将匹配Fred.c但不匹配subdir/Fred.c。这对于你添加了一个包含许多文件而又想忽略的目录来说是非常有意义的,因为这个目录名的优先级高于这些文件名。

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

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