On 02/07, Linus Torvalds wrote: > > From: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Date: Tue, 7 Feb 2017 21:05:28 -0800 > Subject: [PATCH 1/2] pathspec magic: add '^' as alias for '!' > > The choice of '!' for a negative pathspec ends up not only not matching > what we do for revisions, it's also a horrible character for shell > expansion since it needs quoting. > > So add '^' as an alternative alias for an excluding pathspec entry. > > Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > --- > pathspec.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/pathspec.c b/pathspec.c > index 7ababb315..ecad03406 100644 > --- a/pathspec.c > +++ b/pathspec.c > @@ -224,6 +224,12 @@ static const char *parse_short_magic(unsigned *magic, const char *elem) > char ch = *pos; > int i; > > + /* Special case alias for '!' */ > + if (ch == '^') { > + *magic |= PATHSPEC_EXCLUDE; > + continue; > + } > + > if (!is_pathspec_magic(ch)) > break; I like adding '^' to be an alias for excluding patterns. There have been numerous times where I have wanted to use exclude patterns and forgotten that I've needed to do some escape magic to get my shell to leave '!' alone. The only issue I see with doing this is that if a user supplies an exclude pattern for a command which doesn't support exclude pathspec magic the unsupported_magic() function will have slightly cryptic output. git cmd -- :^dir would produce some output which says: ':^dir': pathspec magic not supported by this command: 'exclude' (mnemonic: '!') And the user may scratch their head for a second since they didn't supply the '!' character, but rather '^'. That being said I think it should be fine since the long name of the magic is also printed so the user should be able to figure out what's wrong. I also don't think there are any users of pathspecs which disallow exclude magic so this may not even be an issue. -- Brandon Williams