Re: Why does git track directory listed in .gitignore/".git/info/exclude"?
From: Adam Piatyszek <hidden>
Date: 2016-06-15 22:44:09
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 DocumentationAs 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 <file>..." 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 <file>..." 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 .:................................:.