我进入我的.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 @@
这表明某人必须已经检查过,但我不在乎,因为我想忽略它。有没有办法确保忽略它?
答案 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
目录。