本文已获得原始位置 http://blogs.collab.net/subversion/repository-dictated-configuration-day-3-global-ignores 的许可,并在此处镜像。已删除或更新了无效链接。
作者:Paul Burba
发布 2013-06-26
欢迎来到我的关于存储库指示配置 (RDC) 的三部分系列的最后一部分。在第 2 部分中,我们讨论了新的 svn:auto-props 属性。今天我们将讨论另一个涉及 RDC 的新继承属性,svn:global-ignores
。
再次强调,这只是一个快速回顾,如果您对这些内容不熟悉,请快速阅读 版本控制与 Subversion 一书中的这一部分。
在 1.7 之前,有两种方法可以防止 svn add 和 import 子命令添加我们不想置于版本控制下的某些项目(以及使 svn status 忽略此类未版本化的项目)。这两种方法在 1.8 中仍然存在。
首先是全局忽略运行时配置选项
### Set global-ignores to a set of whitespace-delimited globs ### which Subversion will ignore in its 'status' output, and ### while importing or adding files and directories. ### '*' matches leading dots, e.g. '*.rej' matches '.foo.rej'. global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__ *.rej *~ #*# .#* .*.swp .DS_Store
第二个是svn:ignore
版本控制属性。该属性可以在任何目录上设置,其值应为一个换行符分隔的、Subversion 应该忽略的文件模式列表。这些模式将附加到运行时配置中定义的任何忽略模式。
在 Subversion 1.8 中,这些现有的忽略机制通过svn:global-ignores
属性合并。这个新属性本质上是svn:ignore
属性的更强大版本。与之前的属性一样,svn:global-ignores
只能在目录上设置,其值应为一组换行符分隔的文件模式 1。这些模式将附加到 global-ignores 运行时配置选项中定义的任何模式以及任何适用的svn:ignore
定义模式,以确定可忽略的项目。然而,与svn:ignore
不同的是,svn:global-ignores
属性是可继承的,并应用于设置该属性的目录下的所有路径 2,而不仅仅是目录的直接子级。
以下简短示例演示了此新属性的工作原理。
当使用--no-ignore
选项时,svn:global-ignores
模式本身会被忽略(运行时配置 global-ignores 和 svn:ignore 属性也是如此)。因此,要查看工作副本中的所有未版本控制的项目,我们将该选项传递给 status 子命令
1.8.0>svn st --no-ignore ? calc\trunk\doc\README.foo I calc\trunk\file.bar I calc\trunk\file.baz I calc\trunk\file.foo I calc\trunk\file.qux
在这里,我们看到四个文件被忽略,而一个(README.foo)未版本控制,但与任何忽略模式都不匹配。首先,让我们看看 calc/trunk 上的 svn:ignore 属性
1.8.0>svn pg svn:ignore -vR Properties on 'calc\trunk': svn:ignore *.foo *.moo
这解释了 file.foo。然后我们检查我们的运行时配置,发现这段代码
### Set global-ignores to a set of whitespace-delimited globs ### which Subversion will ignore in its 'status' output, and ### while importing or adding files and directories. ### '*' matches leading dots, e.g. '*.rej' matches '.foo.rej'. global-ignores = *.qux
这解释了 file.qux。但是 file.bar 和 file.baz 呢?只剩下一个选项,那就是新的 svn:global-ignores 属性。果然,在存储库的根目录中,我们找到了该属性,其中包含解释了剩余两个被忽略文件的模式
1.8.0>svn pg svn:global-ignores -v --show-inherited-props calc\trunk Inherited properties on 'calc\trunk', from '.': svn:global-ignores *.bar *.baz
正如我们在第二部分关于 svn:auto-props 中讨论的那样,svn:global-ignores 应该尽可能地设置在存储库树的较高位置。 并且值得最后一次提及:确保您了解第一部分中讨论的继承属性的局限性——因此通过 svn:auto-props
和 svn:global-ignores
实现 RDC 的局限性。
Paul 是 Apache 软件基金会 Subversion 项目的提交者,过去九年一直在从事 Subversion 的工作。他作为 Collabnet 的软件工程师在家乡新罕布什尔州工作,在不写代码的时候,他通常会和侄子们一起滑雪,和朋友们一起骑山地自行车,或者和妻子一起旅行。在遥远的过去,Paul 从新罕布什尔大学获得了商业学位。最近,他获得了波士顿大学的计算机科学硕士学位。