From: Linus Torvalds <torvalds@linux-foundation.org>
To: jidanni@jidanni.org
Cc: git@vger.kernel.org, joey@kitenet.net
Subject: Re: negated list in .gitignore no fun
Date: Thu, 18 Dec 2008 14:38:30 -0800 (PST) [thread overview]
Message-ID: <alpine.LFD.2.00.0812181429100.14014@localhost.localdomain> (raw)
In-Reply-To: <87hc51tajw.fsf@jidanni.org>
On Fri, 19 Dec 2008, jidanni@jidanni.org wrote:
>
> I had dreams of tracking only a few files in a large tree.
> I thought I would maintain that list as a negated list in .gitignore,
> and then always use "git-add ." to keep git's index reflecting my list.
>
> However that's just not possible.
>
> # head -n 5 .gitignore
> *
> !X11/xorg.conf
> !anacrontab
> !apt/apt.conf.d/10jidanni
> !apt/sources.list
> # git-add .
> But git-status only shows anacrontab got added. None of the files in
> the subdirectories get added.
Yeah, the problem is that the '*' matches the subdirectories (like "X11"),
but the negative matching does not. So the subdirectory gets ignored, and
as a result, git won't even traverse into it and notice that there's a
file in there that shouldn't be ignored.
It's actually logical, but not what you want.
So you have several possibilities:
(a) either create a .gitignore that looks like this:
*
!X11
!X11/xorg.conf
!anacrontab
!apt
!apt/apt.conf.d
!apt/apt.conf.d/10jidanni
!apt/sources.list
which should work around it by telling git that it shouldn't ignore
the subdirectories.
(b) realize that ".gitignore" only matters for files that git doesn't
already know about, so if you only want to track a small set of
files, what you _should_ do is just do a .gitignore that looks like
this:
*
and then just force-add the few files you want to track, using
something like
git add -f X11/xorg.conf anacrontab apt/apt.conf.d/10jidanni apt/sources.list
and now you're done - git won't ignore them, since explciitly you
told git to track them.
(c) Try to teach git to not ignore subdirectories leading up to
non-ignored files, and give you the .gitignore semantics you like. I
suspect it's not worth it, because the git behaviour is logical once
you know about it and understand it.
.. and possibly other things you could do too.
Linus
next prev parent reply other threads:[~2008-12-18 22:40 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-18 21:53 negated list in .gitignore no fun jidanni
2008-12-18 22:34 ` Boyd Stephen Smith Jr.
2008-12-18 22:38 ` Linus Torvalds [this message]
2008-12-18 22:54 ` Linus Torvalds
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=alpine.LFD.2.00.0812181429100.14014@localhost.localdomain \
--to=torvalds@linux-foundation.org \
--cc=git@vger.kernel.org \
--cc=jidanni@jidanni.org \
--cc=joey@kitenet.net \
/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).