【问题标题】:.hgignore Filtering out all similar folder structures.hgignore 过滤掉所有相似的文件夹结构
【发布时间】:2014-05-23 17:24:34
【问题描述】:

我在一个存储库中有许多 C# 类库。我想完全忽略 /obj/Debug/ 文件夹中存在的所有文件,无论它们可能存在于何处。它们可能存在于各个项目中的任何深度。

例子:

RepositoryMainFolder\MainProject\obj\Debug\ RepositoryMainFolder\RepositoryMainFolder.Internal.ProjectA\SbiLib.Internal.ProjectA\obj\Debug\ RepositoryMainFolder\RepositoryMainFolder.Internal.ProjectB\RepositoryMainFolder.Internal.ProjectB\obj\Debug\

到目前为止,我已经尝试了一些方法,但这似乎是我所追求的,但它似乎不起作用。

.hgignore:

syntax: glob
RepositoryMainFolder/*/obj/Debug/*
RepositoryMainFolder/*/obj/x64/Debug/*

我已经尝试在正则表达式语法下做同样的事情,但它也不起作用。

【问题讨论】:

  • **/obj/** 是否会忽略任何深度的所有obj 文件夹下的所有内容?我还没有机会彻底测试它。

标签: c# regex mercurial hgignore


【解决方案1】:

嗯,glob 语法是“shell 风格”;例如,在 Windows 和 Unixen 上,* 不会递归到子目录,而是匹配单个文件/文件夹。显然 Mercurial supports the ** glob确实递归:

syntax: glob
RepositoryMainFolder/**/obj/Debug/
RepositoryMainFolder/**/obj/x64/Debug/

不过,对于 Mercurial,glob 不是绝对路径,因此您可以简单地编写:

syntax: glob
/obj/Debug/
/obj/x64/Debug/

甚至只是

syntax: glob
/obj/

对于正则表达式,* 本身不是通配符,而是一个 量词,表示之前出现的任何内容的零个或多个。 . 匹配正则表达式中的任何字符,所以你可以这样写:

syntax: regexp
RepositoryMainFolder/.*/obj/Debug/
RepositoryMainFolder/.*/obj/x64/Debug/

【讨论】:

  • 这是一个令人难以置信的答案。到目前为止,我一直在使用几乎所有这些小技巧并取得了巨大的成功。非常感谢!
  • @Zachary:是的,没问题 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 2013-12-13
  • 1970-01-01
相关资源
最近更新 更多