3

我进入我的 .subversion/config 并添加 .settings,但从 . 中svn diff,我们看到它不起作用。

~/Space/ifp-integration/CIGNA-IFP-ESB$ svn diff
Index: .settings/org.eclipse.jdt.core.prefs
===================================================================
--- .settings/org.eclipse.jdt.core.prefs    (revision 2014)
+++ .settings/org.eclipse.jdt.core.prefs    (working copy)
@@ -1,6 +1,15 @@

这表明一定有人签入了它,但我不在乎,因为我想忽略它。有没有办法确保这被忽略?

4

1 回答 1

8

您不能忽略存储库中的内容。这不是 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目录。

于 2012-04-19T20:35:26.370 回答