How can I ignore everything under a folder in Mercurial
Version ControlMercurialHgignoreVersion Control Problem Overview
I am looking for an expression for the .hgignore file, to ignore all files beneath a specified folder.
eg: I would like to ignore all files and folders beneath bin
Actually any advice on how the expressions are formed would be great
Version Control Solutions
Solution 1 - Version Control
Alternately:
syntax: glob
bin/**
Solution 2 - Version Control
I did some experiments and I found that the regex syntax on Windows applies to the path starting with the current repository, with backslashes transformed to slashes.
So if your repository is in E:\Dev for example, hg status
will apply the patterns against foo/bar/file1.c and such. Anchors apply to this path.
So:
- Glob applies to path elements and is rooted to element parts
- foo matches any folder (or file) named foo (not to "foobar" nor "barfoo")
- *foo* matches any folder or file with "foo" in the name
- foo/bar* matches all files in "foo" folder starting with "bar"
- Regex is case sensitive, not anchored
- Of course, backslash regex special characters like . (dot)
- / matches \ path separator on Windows. \ doesn't match this separator...
- foo matches all files and folders with "foo" inside
- foo/ matches only folders ending with "foo"
- /foo/ matches the folder "foo" somewhere in the path
- /foo/bar/ matches the folder "bar" in the folder "foo" somewhere in the path
- ^foo matches file or folder starting by foo at the root of the repository
- foo$ matches file ending with foo
I hope this will help, I found the [HGIGNORE(5)](http://www.selenic.com/mercurial/hgignore.5.html "HGIGNORE(5)") page a bit succinct.
Solution 3 - Version Control
Both of those will also filter out a directory called cabin
, which might not be what you want. If you're filtering top-level, you can use:
^/bin/
For bin
directories below your root, you can omit the ^. There is no need to specify syntax, regexp is the default.
Solution 4 - Version Control
syntax: glob bin/**
This answer is shown above, however I'd also like to add that * and ** are handled differently. ** is recursive, * is not.
See Hg Patterns
Solution 5 - Version Control
Nevermind, I got it
syntax: regexp
bin\\*
expressions follow standard perl regular expression syntax.
Solution 6 - Version Control
to ignore .class files
syntax: regexp
?\.class