From: Adam Piatyszek Date: Thu, 31 Jan 2008 07:05:34 GMT Subject: Re: Why does git track directory listed in .gitignore/".git/info/exclude"? Message-ID: <47A1733E.9040103@users.sourceforge.net> In-Reply-To: <7vprvjgi9v.fsf@gitster.siamese.dyndns.org> Hi Junio, * Junio C Hamano [30 I 2008 21:39]: > When you say "foo", you mean "I want either 'foo' that is a > non-directory, or everything under 'foo' if that is a > directory". When you say "foo/", you are saying "I do not want > 'foo' if it is a non-directory. I want everything under 'foo' > if and only if that is a directory". Compare: > > git ls-files -s Makefile/ > git ls-files -s Makefile > > The first one is silent, and the latter answers. On the other > hand, for a directory, both of these give you the same: > > git ls-files Documentation/ > git ls-files Documentation > As you said above both "Documentation/" and "Documentation" match the existing tracked directory named "Documentation". That is how ls-files works and it is the only sane way. The problem is that I expect that directory entries ending with "/" in .gitignore and .git/info/exclude files are treated in a similar way, i.e. they are being _ignored_ with all the stuff in them, in the same way as directory entries without the ending slash. Unfortunately this is not the case. See this example: ediap@lespaul ~/tmp $ mkdir repo && cd repo ediap@lespaul ~/tmp/repo $ git init Initialized empty Git repository in .git/ ediap@lespaul ~/tmp/repo $ touch a.txt ediap@lespaul ~/tmp/repo $ git add a.txt ediap@lespaul ~/tmp/repo $ git commit -m "a file" Created initial commit 1712595: a file 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 a.txt ediap@lespaul ~/tmp/repo $ mkdir d ediap@lespaul ~/tmp/repo $ touch d/b.txt ediap@lespaul ~/tmp/repo $ git status # On branch master # Untracked files: # (use "git add ..." to include in what will be committed) # # d/ nothing added to commit but untracked files present (use "git add" to track) ediap@lespaul ~/tmp/repo $ echo "d/" > .gitignore ediap@lespaul ~/tmp/repo $ git add .gitignore ediap@lespaul ~/tmp/repo $ git commit -m "ignore" Created commit 29ebf4d: ignore 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 .gitignore ediap@lespaul ~/tmp/repo $ git status # On branch master # Untracked files: # (use "git add ..." to include in what will be committed) # # d/ nothing added to commit but untracked files present (use "git add" to track) But: ediap@lespaul ~/tmp/repo $ echo "d" > .gitignore ediap@lespaul ~/tmp/repo $ git add .gitignore ediap@lespaul ~/tmp/repo $ git commit --amend -m "ignore" Created commit 43198d4: ignore 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 .gitignore ediap@lespaul ~/tmp/repo $ git status # On branch master nothing to commit (working directory clean) I hope you now understand what I was trying to express in my previous email. :-) BR, /Adam -- .:. Adam Piatyszek (ediap) .:.....................................:. .:. ediap@users.sourceforge.net .:................................:.