让我们一次过一件事情:
忽略某些内容只是一种帮助您不要意外将您不想要的内容放入存储库中的方法。它可以是全局的,也可以是特定目录的本地文件。
忽略 Subversion 中的某些内容会做两件事:
- 执行时不会列出
svn status
- 如果您执行此操作,则不会添加
svn add *
差不多就是这样。事实上,忽略仅适用于不在您的存储库中的文件。您不能忽略已添加到存储库中的文件。
为什么要全局忽略某些内容?
假设我做 C 开发。我获取带有 *.c 后缀的文件,并将它们编译成带有 *.o 后缀的文件。我不希望这些 *.o 文件在我的目录中,所以我设置了一个全局忽略。
为什么您只想忽略单个目录中的某些内容?
假设我构建并执行一个程序,它会output.txt
在我的目录中创建一个名为的文件。我不希望将其添加到我的存储库中,因此我svn:ignore
在该目录中设置了忽略该文件。
我用 Maven 构建东西,Maven 创建了一个目标目录,在我所有的 Maven 项目中,我告诉 Subversion 忽略那个目标目录。
空格分隔的 glob是
什么意思?
通配符是一种廉价而简单的正则表达式形式,如语法。你可能一直在使用它。它主要用于命令行。这是使用通配符:
$ ls *.txt
因此,所有以空格分隔的 glob都意味着是一堆glob表达式,例如上面的,无论它在哪里,你都想忽略它。你用空格而不是逗号分隔它们:
对:
global-ignores="*.o *~ *.class"
错误的:
global-ignores="*.o, *~, *.class"
还有一件事,忽略(无论是 global 还是 by svn:ignore
)中的 glob(即文件规范)不能有目录前缀。您不能全局忽略目录,但可以忽略svn:ignore
目录。例如,我使用 Maven,它在名为target的目录下构建所有内容。我可以svn:ignore
在目标目录上设置一个。
所以,回到你的问题。如果每个人都有这个文件,但没有人应该将它添加到 Subversion,那么应该在那个目录中忽略它。所有这一切都是为了防止有人意外地将它添加到 Subversion。它不会在他们的视野中隐藏它。
如果事实上,最后,你可以忽略忽略。即使您之前说过要忽略它们,您也可以通过简单地指定文件来提交和添加文件。
如果你真的想确保不会意外提交不应该提交的文件,你应该使用我的预提交触发器。这允许您指定不应提交的内容和位置。您可以使用通配符语法或正则表达式语法。例如:
[file Don't allow people to add foo files to the bar directory]
file=**/bar/foo.*
access=no-add
users=@ALL
[file Don't allow people to add bar files to the foo directory]
match=/bar/foo.*$
access=no-add
users=@ALL
第一个是通过glob设置的。第二个是通过正则表达式设置的。
希望这能回答你的问题。