如何使mercurial忽略所有隐藏文件?

时间:2010-03-07 04:26:48

标签: mercurial dvcs glob hgignore

我讨厌看到我的存储库中的每个目录列出每个文件两次,一次在前面有一个点,一次没有。我尝试将.*添加到我的.hgignore文件中,但它没有效果。这是错误的语法,更重要的是,首先尝试这个是一个坏主意吗?感谢。

2 个答案:

答案 0 :(得分:17)

你在gavinb的评论中得到了几乎正确的答案,但这场比赛有点广泛。然而,关于忽视面部的关键概念是由RogerPage提供的,再次在评论中(每个人都更喜欢评论和答案?)。

让我们看看这九个文件:

dir.with.dots/file.with.dots
dir.with.dots/filewithoutdots
dir.with.dots/.filestartwithdot
dirwithoutdots/file.with.dots
dirwithoutdots/filewithoutdots
dirwithoutdots/.filestartwithdot
.startwithdot/file.with.dots
.startwithdot/filewithoutdots
.startwithdot/.filestartwithdot

如果在hgignore的默认正则表达式模式下,您执行:

\..*

你忽略了这9个文件中的8个:

$ hg stat -i
I .hgignore
I .startwithdot/.filestartwithdot
I .startwithdot/file.with.dots
I .startwithdot/filewithoutdots
I dir.with.dots/.filestartwithdot
I dir.with.dots/file.with.dots
I dir.with.dots/filewithoutdots
I dirwithoutdots/.filestartwithdot
I dirwithoutdots/file.with.dots

比你想要的更广泛。它忽略了任何一个点任何地方的东西。

要忽略所有文件和指南(不是你说的,但你想要的东西),以点开头,你使用这个正则表达式模式:

(^|/)\.

表示字面点之前的东西必须是行的开头(^)或斜杠。

$ hg stat -i
I .hgignore
I .startwithdot/.filestartwithdot
I .startwithdot/file.with.dots
I .startwithdot/filewithoutdots
I dir.with.dots/.filestartwithdot
I dirwithoutdots/.filestartwithdot

仅捕获以点开头的文件或目录。

然而,出现的另一个关键概念是.hgignore在添加文件后没有效果。它会阻止通过外卡添加,但您始终可以使用显式hg add覆盖.hgignore。并且一旦添加了文件,就不再咨询hgignore。

这实际上非常方便,因为你可以广泛地忽略(例如:.*\.jar),然后手动添加你想要的异常,而不必使用你的hgignore文件。但是,在这种情况下,这意味着您需要hg rm意外添加的文件,而tonfa显示了如何执行此操作(只要文件名中没有空格)。

最后,听起来你想要的.hgignore文件是:

(^|/)\._

您需要删除已添加的内容:

find . -type f -name "._*" -print0 |xargs -0 hg rm

答案 1 :(得分:0)

我在.container { position: relative; } @media (max-width: 767px){ .img-responsive.mytumb { width: 20%} }

中使用此功能
.hgignore

其中包含:句点前面没有正斜杠以外的其他内容。

Ry4an的解决方案也很好,我之前也使用过那个。不确定哪个更有效率。

https://regex101.com/r/dB4bW7/1