如何从Mercurial/TortoiseHG的.hgignore文件中排除文件夹列表?

7 浏览
0 Comments

如何从Mercurial/TortoiseHG的.hgignore文件中排除文件夹列表?

好的。我需要忽略版本控制中的一系列文件,除了三个特定文件夹中的文件(我们称它们为Folder1,Folder2和Folder3)。我可以将所有需要忽略的文件夹列为一个简单的列表,但我认为这不是一种优雅的方式,所以我编写了以下正则表达式:

.*/(Bin|bin)/(?!Folder1/|Folder2/|Folder3/).*

我的思路如下,从左到右:

  • .* - 任意数量的任意字符。
  • / - 斜杠符号,用于分隔文件夹。
  • (Bin|bin) - 名为"Bin"或"bin"的文件夹。
  • / - 斜杠符号,用于分隔文件夹。
  • (?!Folder1/|Folder2/|Folder3/) - 文件夹名称不是"Folder1/",也不是"Folder2/",也不是"Folder3/"。这部分最复杂,但我在Google上找到了一些信息。我不明白为什么它会起作用,但在测试时它确实起作用。
  • .* - 任意数量的任意字符。

这个表达式在regex101.com上使用一些代表文件路径的文本字符串进行测试时完美地工作,但当我将它放入我的.hgignore文件中时,什么都不起作用,如下所示:

syntax: regexp
.*/(Bin|bin)/(?!Folder1/|Folder2/|Folder3/).*

由于某种原因,它忽略了所有"Bin"和"bin"文件夹中的所有文件和子文件夹。我该如何完成我的任务?

附言:据我所知,Mercurial/TortoiseHG使用Python/Perl正则表达式。

非常感谢。

0
0 Comments

如何从Mercurial/TortoiseHG的.hgignore文件中排除一组文件夹?

问题的出现原因是需要忽略一些文件夹,但同时又需要保留其中的一些文件夹。为了实现这个要求,需要一个正则表达式,可以匹配需要忽略的文件夹,但不匹配需要保留的文件夹。

解决方法是使用以下正则表达式:/[Bb]in/(?!(folder1|2folder|third)/)

这个正则表达式可以匹配类似于/bin/somename/...的字符串中的/bin/部分,但Mercurial只关注是否匹配,不关注具体匹配的内容。

原始的错误回答中提供了一个错误的正则表达式:/[Bb]in/Folder[123]/,这个表达式只能匹配类似于/bin/Folder1//bin/Folder2//bin/Folder3/的字符串,不能满足要求。

同时,回答中还解释了一些相关的概念,如Mercurial只跟踪文件而不跟踪文件夹,文件名匹配忽略模式时文件是否已跟踪的问题等。

需要注意的是,正则表达式的匹配不是自动锚定的,如果需要锚定行为,可以在正则表达式的开头使用^,在结尾使用$。在这个问题中,不需要锚定行为,所以可以省略开头和结尾的.*

最后,作者提到了自己尝试过使用否定参数来解决问题,但没有成功。他也意识到自己没有清晰地表达出自己的目标,导致回答的方向偏离了问题的要求。建议提供一些示例来明确所需的行为,以避免产生混淆。

作者表示将尝试创建一个样本仓库,供大家测试表达式。

0