忽略文件和目录

Posted on Posted in 6.日常使用指南

忽略文件和目录

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

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

 In most projects you will have files and folders that should not be
 subject to version control. These might include files created by the
 compiler, *.obj, *.lst, maybe an output  folder used to
store the executable. Whenever you commit changes,  TortoiseSVN shows
your unversioned files, which fills up the file list  in the commit
dialog. Of course you can turn off this display, but then  you might
forget to add a new source file.

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

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

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

全局忽略列表

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

忽略已版本控制的条目

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

忽略列表中的模式匹配

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

To ignore all CVS folders you should either specify a pattern of *CVS or better, the pair CVS */CVS. The first option works, but would also exclude something called ThisIsNotCVS. Using */CVS alone will not work on an immediate child CVS folder, and CVS alone will not work on sub-folders.

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