From: Peter Date: Thu, 01 Oct 2009 13:00:31 GMT Subject: Re: gitignore: how to exclude a directory tree from being ignored Message-ID: <4AC4A7EF.9030002@mycircuit.org> In-Reply-To: <4AC4A310.8000507@viscovery.net> Johannes Sixt wrote: > Peter schrieb: > >> Hi >> I want to exclude binaries except in a dir tree that I do not control. >> >> In .gitignore I have: >> >> >> I would expect that all *.exe and *.o are ignored except those somewhere >> in the vendor dir tree. >> However, the *.exe and *.o in the vendor dir tree are also ignored. >> > > This works for me: > > *.exe > *.o > !vendor/*.exe > !vendor/*.o > > Note that git-status does not descend into directories from which no files > are tracked. Therefore, this will work only after you have git-added at > least one file from vendor/. > > git ls-files -o --exclude-standard does descend into the directory. > > Furthermore, the !vendor/*.exe patterns are not recursive. Perhaps it is > easier for you to have a separate vendor/.gitignore that has: > > !*.exe > !*.o > > These _are_ recursive. > > -- Hannes > Thanks a lot, that clarifies the problem for me. As far as I understand now: 1) I can't have just one .gitignore file in the root dir, if I want to _recursively_ inverse the exclude pattern for a sub dir tree. In this case, I have to put individual .gitignore files in the sub trees I want to re-include. 2) In order to see what will be staged, I have to use the : git ls-files -o --exclude-standard instead of : git ls-files -o -i --exclude-from=.gitignore because the latter won't consider .gitignore patterns in subtree Peter