From: David Greaves <david@dgreaves.com>
To: Petr Baudis <pasky@ucw.cz>
Cc: Junio C Hamano <junkio@cox.net>,
torvalds@osdl.org, GIT Mailing Lists <git@vger.kernel.org>
Subject: Re: [RFD] Ignore rules
Date: Sat, 14 May 2005 18:51:43 +0100 [thread overview]
Message-ID: <42863AAF.7020506@dgreaves.com> (raw)
In-Reply-To: <20050514153027.GN3905@pasky.ji.cz>
Petr Baudis wrote:
>Here, I would like more people to speak up, plaese, especially the
>authors of other layers over git than Cogito, since I think it'd be
>great if we could agree on common ignore rules format and we could just
>call the files ".gitignore" instead of ".cgignore", ".jitignore" etc.
>
>
>Dear diary, on Sat, May 14, 2005 at 05:13:08PM CEST, I got a letter
>where David Greaves <david@dgreaves.com> told me that...
>
>
>>I was wondering about supporting _both_ globs and re's
>>right now my ignore file has a # to precede comment lines
>>
>>
>
>I assume \# will override that?
>
>
doesn't match /^\w#/ so yes
>>maybe re: precedes regexp lines and unadorned lines are globs.
>>
>>
>Or maybe even /, which is the common regexp prefix anyway...
>
>
I thought about it but thought it would look strange since we won't want
a closing /
OTOH, no globs will start with a / since they have to be relative so
maybe a good choice after all.
>To mention it in this mail too, I think leading '!' should do the
>"ignore exclude" - that is, it would override any possible previous
>ignore decisions about the file. E.g. '!*' would throw away all
>previously applied ignore rules.
>
>
Well, CVS has a lone ! meaning just that.
I wonder if we should simply say that most patterns are 'ignore' patterns.
'!' patterns are 'accept' patterns.
The last seen pattern wins
so given:
*.o
!fre*.o
freddy.o
frog.o is ignored
fred.o is seen
freddy.o is ignored
This means !* (or is that !**) has the same effect as a lone ! in CVS.
>>However the re's provided by regex(7) are too weedy to be worth
>>bothering with.
>>If however, there is a serious plan to go to perl, it may be worth
>>providing for this now in the ignore syntax.
>>
>>Also... you haven't mentioned perl for a while - can you give us an update?
>>I personally think we're making life needlessly unpleasant by sticking
>>with shell.
>>
>>
>
>If there is still a serious plan, it is much more long-term now, since
>shell turns out to keep doing fine and everything we need, and that all
>reasonably fast.
>
>That said, I think it's fine to use Perl regexps. I think they rule. :-)
>But what do others think? Should we stick with POSIX regexps (I assume
>at least extended instead of basic), or go with Perl regexps?
>
>
I vote perl re's
You have the power if needed but most of the time it'll be basic regexps.
I think if we have a central 'path' matching .git/ignore then regexps
are needed.
Then if we have them, we may as well allow them.
OTOH: A plethora of .gitignore files with the !negation mechanism may
make globs adequate.
>>Additionally this causes problems with sharing the same exclude file as
>>used by git.
>>However...
>>I really think git's exclude file capability and cogito's are different.
>>Cogito is aiming to provide full-blown SCM capabilities - git isn't
>>
>>
>
>If we get to agree on some common format, I'm thinking whether it
>wouldn't be actually good to extend the --exclude option to support it.
>How much of an issue would that be? What do others think?
>
>
I'm not convinced it needs to be extended.
It's trivial to take git-ls-files and filter it's results.
The rest of git will need filtering.
>>I am also concerned that a centralised ignore file is not flexible enough.
>>Certainly limiting if we support globs only.
>>It may be that you want different rules in different trees - someone on
>>lkml mentioned that excludes vary in different parts of the source.
>>Eg .s files may be generally ignored - but not in the asm parts of the tree.
>>
>>
>
>I imagine it as (ignore rules applied in this order):
>
><default ignore list>:
>
>Some builtin ignore list catching files like *.o, *.a and such.
>
>
Why builtin?
Why not have a default setup for .git/ignore
The way I'd do it is in cg-init :
[ -f cogito.ignore ] && mv cogito.ignore .git/ignore
[ ! -f .git/ignore ] && cat <<STD_IGNORE > .git/ignore
>Remember that you can throw it away with !* if you don't like it.
>
>
but it means reading the man pages to find it out whilst you're editing
.git/gitignore
I could never remember what CVS ignored...
>/.git/ignore:
>
>Per-repository ignore list, not version tracked etc; really a local thing.
>
>
~/.gitignore ?? CVS has it - personal prefs for your editor's strange
numbered backups etc
>/.gitignore
>/**/.gitignore:
>
>(Applied in the order from the project root to the current directory.)
>
>
>Version tracked ignore list, which concerns the current directory, BUT
>may match pathnames instead of just filenames (but no ..). That is, you
>could do something like
>
> echo '*.o' >.gitignore
>
>to ignore all the object files in the current directory, and
>
> echo '**.o' >.gitignore
>
>to also ignore the object files in all the subdirectories.
>
>
well, is the matching against files or paths?
And do .gitignores affect their sub-tree or just their dir?
And if they're vc'ed then git needs to stop ignoring .files
>
>Opinions?
>
>
I think the global ignores contain both:
* regexps against the path relative to the project root
* regexps against the filename
* shell globs against the filename
I think the .gitignore's operate on a per-tree basis (so their directory
and lower)
I think .gitignore matching should be against filenames (not paths)
# comments
/regexp
!/inverted regexp
shellglob
!inverted shellglob
Lesson from the CVS manual:
Specifying `-I !' to `cvs import' will import everything, which is
generally what you want to do if you are importing files from a
pristine distribution or any other source which is known to not contain
any extraneous files. However, looking at the rules above you will see
there is a fly in the ointment; if the distribution contains any
`.cvsignore' files, then the patterns from those files will be
processed even if `-I !' is specified. The only workaround is to
remove the `.cvsignore' files in order to do the import. Because this
is awkward, in the future `-I !' might be modified to override
`.cvsignore' files in each directory.
--
next prev parent reply other threads:[~2005-05-14 17:53 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-12 21:30 [PATCH] Ignore file filter David Greaves
[not found] ` <7v64xodshs.fsf@assigned-by-dhcp.cox.net>
2005-05-13 8:50 ` David Greaves
2005-05-13 23:12 ` Petr Baudis
2005-05-14 8:28 ` David Greaves
2005-05-14 9:01 ` Junio C Hamano
2005-05-14 14:24 ` Petr Baudis
2005-05-14 15:13 ` David Greaves
2005-05-14 15:30 ` [RFD] Ignore rules Petr Baudis
2005-05-14 17:51 ` David Greaves [this message]
2005-05-14 18:12 ` Junio C Hamano
2005-05-15 1:11 ` Jon Seymour
2005-05-15 6:05 ` Junio C Hamano
2005-05-15 6:52 ` Junio C Hamano
2005-05-15 20:27 ` [RFD] git-run-with-user-path Junio C Hamano
2005-05-16 9:35 ` [RFD] Ignore rules Matthias Urlichs
2005-05-16 16:05 ` David Greaves
2005-05-14 12:21 ` [PATCH] Ignore file filter Petr Baudis
2005-05-14 14:28 ` David Greaves
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=42863AAF.7020506@dgreaves.com \
--to=david@dgreaves.com \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
--cc=pasky@ucw.cz \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).