我进入我的.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 @@
Run Code Online (Sandbox Code Playgroud)
这表明有人必须检查它,但我不在乎,因为我想忽略它.有没有办法确保忽略它?
你不能忽视你的存储库中的东西.这不是忽视在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
Run Code Online (Sandbox Code Playgroud)
这将检出工作目录中的所有文件夹和文件,但不检查任何子目录.在Kornshell和BASH(如果你设置shopt -s extglob):
$ svn update --set-depth=infinity !(.settings)
Run Code Online (Sandbox Code Playgroud)
这将继续您在除目录之外的所有目录中的结帐.settings.
你也可以这样做:
$ svn update --set-depth=exclude .settings
Run Code Online (Sandbox Code Playgroud)
.settings一旦它已经签出就删除目录.这不会.settings从存储库中删除目录,但它会.settings从工作目录中删除目录,并且svn diff在工作目录(但不是存储库URL)上不会报告.settings目录中的任何内容.
我需要强调的一个重要问题:忽略只能防止意外添加到存储库中的文件.它不会阻止某人添加它,一旦它在那里,它将不会被忽略.
此外,您的全局忽略设置对每个人来说都不是全局的.对你而言 如果要阻止人们添加不应添加到存储库的文件,则需要像这样的预提交钩子.
此挂接可用于防止提交具有特定名称的文件或目录,还可用于确保设置文件和目录的属性.例如,您可能希望确保人们无法添加.settings项目中的目录.或者svn:ignore该目录上的属性设置为忽略该.settings目录.