全局忽略是否有办法仅在特定目录中指示特定文件或文件名模式?

时间:2012-08-21 18:42:54

标签: svn

我有一个我不想删除的文件,但不属于repo。我不想为它提交ignore属性,以免影响其他用户,如果他们在他们的系统上有它,可能不会忽略它。我不想只是不提出忽略,因为它只是困扰我不得不试图忽略忽略道具。

我在配置文件中玩了全局忽略,我可以按名称忽略它,即:file.txt但是当我有另一个名为file.txt的文件我不想忽略的那一天呢? ?所以我尝试给它添加一个路径名称,如下所示:folder/file.txt因为我在Windows folder\file.txt上,并且认为可能会出现某种正则表达式folder\\file.txt

这些似乎都不起作用,即使我一直使用斜杠,反斜杠或转义反斜杠来驱动字母c:\repo\folder\file.txt

那么有没有办法在不使用属性的情况下专门引用此文件的忽略?

此外,文档将这些模式称为“以空格分隔的整体”,这个意义上的glob对我来说是一个新术语,任何人都可以对这个定义有所了解吗?考虑到可用于glob的许多非IT定义,谷歌不是我的朋友。

1 个答案:

答案 0 :(得分:1)

让我们一次完成一件事:

忽略某些内容只是一种帮助您不会意外地将某些内容放入存储库中您不想要的内容的方法。它本质上可以是全局,也可以只是特定目录的本地。

忽略Subversion中的内容有两件事:

  • 当您执行svn status
  • 时,它不会被列出
  • 如果您执行svn add *
  • ,则无法添加

几乎就是这样。实际上,忽略仅适用于存储库中 的文件。您无法忽略已在存储库中添加的文件。

为什么要全局忽略某些内容?

我们说我做C开发。我获取具有* .c后缀的文件,然后将它们编译成带有* .o后缀的文件。我不想在我的目录中使用这些* .o文件,因此我设置了全局忽略。

为什么要忽略单个目录中的某些内容?

让我们说如果我构建并执行一个程序,它会在我的目录中创建一个名为output.txt的文件。我不希望将其添加到我的存储库中,因此我将该目录中的svn:ignore设置为忽略该文件。

我使用Maven构建内容,Maven创建了一个目标目录,在我的所有Maven项目中,我告诉Subversion忽略 target 目录。

以空格分隔的球体是什么意思?

Globbing是一种廉价而简单的常规表达形式,如语法。你可能一直都在使用它。它主要用在命令行上。这是使用globbing:

$ ls *.txt

因此,所有以空格分隔的整数意味着是一堆 glob 表达式,如上所述,无论它在哪里都要忽略。你用空格分隔它们而不是用逗号分隔它们:

右:

global-ignores="*.o *~ *.class"

错:

global-ignores="*.o, *~, *.class"

还有一件事,忽略的全局(即文件规范)(无论是全局还是svn:ignore)都不能有目录前缀。您无法全局忽略目录,但可以svn:ignore一个目录。例如,我使用Maven,它在名为 target 的目录下构建所有内容。我可以在目标目录上设置svn:ignore

所以,回到你的问题。如果每个人都有这个文件,但没有人应该将它添加到Subversion,那么它应该在该目录中被忽略。所有这一切都是为了防止有人意外地将其添加到Subversion。它不会把它隐藏起来。

如果事实上,最后你可以忽略忽略。您可以通过简单地指定它们来提交和添加文件,即使您之前曾说过忽略它们。

如果你真的想确保不小心提交不应该提交的文件,你应该使用我的pre-commit触发器。这允许您指定不应提交的内容和位置。您可以使用通配语法或正则表达式语法。例如:

[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 设置的。第二个是通过正则表达式设置的。

希望这能回答你的问题。