0

我有一个不想删除但不属于 repo 的文件。我不想为它提交一个忽略属性,以免影响其他可能不想忽略它的用户,如果他们在他们的系统上拥有它。我不想只是不提交忽略,因为它只是让我不得不不顾一切地忽略忽略道具。

我在配置文件中使用了 global-ignores,我可以按名称忽略它,即:file.txt但是当我有另一个我不想忽略的名为 file.txt 的文件的那一天呢?所以我尝试为它提供一个路径名,就像这样:folder/file.txt因为我在 Windows 上folder\file.txt并且认为可能正在发生某种正则表达式folder\\file.txt

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

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

此外,文档将这些模式称为“空格分隔的 glob”,从这个意义上说 glob 对我来说是一个新术语,任何人都可以阐明定义吗?考虑到 glob 可用的许多非 IT 定义,Google 在这里不是我的朋友。

4

1 回答 1

1

让我们一次过一件事情:

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

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

希望这能回答你的问题。

于 2012-08-21T21:42:36.957 回答