.hgignore语法只忽略文件,而不是目录?

时间:2009-06-26 11:30:41

标签: regex mercurial dvcs hgignore

我有一个我似乎无法理解的问题。我在Windows上使用TortoiseHg(版本0.7.5)但在Linux上我遇到了同样的问题。这是:

我的.hgignore文件:

syntax: regexp
^[^\\/]+$

我想要实现的是将忽略列表中的文件添加到hg存储库的根目录中。

例如,如果我有这样的话:

.hg
+mydir1
+mydir2
-myfile1
-myfile2
-anotherfile1
-anotherfile2 
.hgignore

我希望忽略myfile1(2)和anotherfile1(2)(名称仅用于此示例的目的 - 它们没有可以轻松放入hgignore文件的简单规则)

是否有一些我缺少的东西,因为我很确定regexp是好的(我甚至测试过它)?想法?

有没有更简单的方法来实现这一目标? [添加到mercurial存储库根目录中的忽略列表文件]

2 个答案:

答案 0 :(得分:11)

我在irc.freenode.net上的#mercurial中转发了这个问题,回复是您无法区分文件和目录 - 目录是匹配的,没有您在正则表达式中搜索的斜杠。< / p>

但是,如果你可以假设你的目录永远不会包含一个句号.,但你的文件会,那么这样的东西似乎有效:

^[^/]*\..*$

我在像这样的存储库中测试过它:

% hg status -ui
? a.txt
? bbb
? foo/x.txt
? foo/yyy

添加.hgignore文件会产生:

% hg status -ui
? bbb
? foo/x.txt
? foo/yyy
I .hgignore
I a.txt

表示在根目录中正确忽略了a.txt文件,但x.txt子目录中的foo未正确。您还可以看到根目录中名为bbb的文件被忽略。但也许您可以自己将这些文件添加到.hgignore文件中。

如果您的根目录中恰好有bar.baz这样的目录,那么此目录及其中的所有文件都将被忽略。我希望这有点帮助。

答案 1 :(得分:7)

这是一个肮脏的伎俩:

在目录中创建一个空文件“.hidden”,而不是添加到.hgignore:

^mydir/(?!\.hidden).+$

这将忽略目录中除“.hidden”之外的所有文件。