您不能忽略存储库中的内容。这不是 Subversion 中忽略的工作方式。
忽略只是一种防止意外 将文件添加到存储库的方法。如果存储库中已存在文件,则不能忽略它。
全局忽略仅适用于文件而不适用于目录。如果你.settings
在你的 Subversion 配置文件中说忽略,它不会忽略一个名为 . 的目录.settings
,而只会忽略一个名为.settings
. 而且,它只会在.settings
文件不在存储库中时忽略该文件。
基本上,如果您说svn add *
或svn status
,则任何不在存储库中且与您的全局忽略模式匹配的文件都不会添加到svn status
. 这就是它所做的一切。
svn:ignore
您可以在一个类似的目录上创建一个属性。但是,svn:ignore
也会忽略目录。比如你有一个 Maven 项目,你可以设置svn:ignore
= target
,不会上报目标文件夹。但是,svn:ignore
仅适用于属性所在的目录,而不是子目录。
那么如何忽略.settings
目录呢?很简单:你不检查它。不幸的是,在 Subversion 中没有简单的方法可以做到这一点。以下是您可以执行的操作:
$ svn checkout --depth=immediates http://server/src/myproj
这将检查工作目录中的所有文件夹和文件,但不会检查任何子目录。在 Kornshell 和 BASH(如果您设置shopt -s extglob
)中:
$ svn update --set-depth=infinity !(.settings)
这将继续在除目录之外的所有目录中结帐.settings
。
你也可以这样做:
$ svn update --set-depth=exclude .settings
删除.settings
目录一旦它已经被签出。这不会.settings
从存储库中删除目录,但会.settings
从您的工作目录中删除该目录,并且svn diff
在您的工作目录(但不是存储库 URL)上不会报告.settings
目录中的任何内容。
我需要强调的重要一点:忽略仅防止意外将文件添加到存储库中。它不会阻止某人添加它,并且一旦它在那里,它就不会被忽略。
此外,您的全局忽略设置并非对所有人都是全局的。只给你。如果你想阻止人们添加不应该添加到存储库的文件,你需要一个像这样的 pre-commit 钩子。
此钩子可用于防止提交具有特定名称的文件或目录,也可用于确保设置文件和目录的属性。例如,您可能希望确保人们无法.settings
在您的项目中添加目录。或者svn:ignore
目录上的该属性设置为忽略.settings
目录。