SVN全局忽略不起作用(来自其他帖子的解决方案不起作用)

时间:2012-04-19 19:24:08

标签: svn

我进入我的.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 @@

这表明某人必须已经检查过,但我不在乎,因为我想忽略它。有没有办法确保忽略它?

1 个答案:

答案 0 :(得分:6)

您无法忽略存储库中的内容。这不是忽视在Subversion中工作的方式。

忽略只是一种阻止意外 文件添加到存储库的方法。如果存储库中已存在文件,则不能忽略它。

全局忽略仅适用于文件而不适用于目录。如果您在Subversion配置文件中说忽略.settings,它将不会忽略名为.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目录中的任何内容。

我需要强调的一个重要问题:忽略只会阻止 意外 将文件添加到您的存储库中。它不会阻止某人添加它,一旦它存在,它就不会被忽略。

此外,您的全局忽略设置并不是全局的。对你而言如果您想阻止人们添加不应添加到存储库的文件,您需要一个预提交钩子,如this one

此挂钩可用于防止提交具有特定名称的文件或目录,还可用于确保设置文件和目录的属性。例如,您可能希望确保人们无法添加到项目中的.settings目录中。或者,目录中的svn:ignore属性设置为忽略.settings目录。