Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I ignore all directories except one using .hgignore?

I'm managing $HOME using Mercurial, to keep my dotfiles nice and tracked, or at least the ones that matter to me.

However, there's a profusion of files and directories in ~ that do not need to be tracked, and that set is ever-changing and ever-growing.

Historically, I've dealt with this by having this .hgignore:

syntax: glob
*

This keeps my status clean, as far as it goes, making only previously tracked files visible. However, I have some directories (in my case, scripts, .emacs.d) that I would like to see untracked files in; I almost always want to track new additions to those directories.

I know that I can run hg st -u scripts to identify untracked files, but I want a means whereby I can achieve the same function using plain ole hg status.

Is there a way to do this?

like image 445
Chris R Avatar asked Sep 03 '10 15:09

Chris R


Video Answer


1 Answers

Try this in .hgignore instead:

syntax: regexp

^(?!(scripts|foo|bar)/)[^/]+/
  • ^ matches start of path
  • (?!(scripts|foo|bar) uses negative lookahead to ignore all files except those in directories scripts, foo or bar
  • /) ensures that directories which have a tracked directory as a prefix are ignored
  • [^/]+/ then actually matches any directory (excluding those ruled out by the lookahead), so that files in ~ aren't ignored

Credit for the central idea in this solution (the negative lookahead) goes to Michael La Voie's answer to this question

like image 81
anton.burger Avatar answered Oct 04 '22 20:10

anton.burger