From: Phillip Wood Date: Sat, 24 Jun 2023 10:13:22 GMT Subject: Re: Bug: git add does not process gitignore properly Message-ID: In-Reply-To: On 23/06/2023 23:07, Eric Sunshine wrote: > On Thu, Jun 22, 2023 at 3:56 PM David C Black wrote: >> Sitting at the rood of my working directory I attempted to add a file to the git repository with: >>> git add extern/bin/build >> >> The repository had the following .gitignore file contents: >>> /extern/ >>> !/extern/bin/ >>> !/extern/ABOUT.md >> >> I received an error message: >>> The following paths are ignored by one of your .gitignore files: >>> extern >>> hint: Use -f if you really want to add them. >> >> By negating entries in the /extern/bin/ directory, I did not expect an error >> message. Of course adding -f made it work, but I think it does not match the >> described behavior for this tool. > > This appears to be working as documented. From the gitginore(5) man page: > > An optional prefix "!" which negates the pattern; any matching > file excluded by a previous pattern will become included again. It > is not possible to re-include a file if a parent directory of that > file is excluded. > > In your .gitignore file, /extern/ is ignored, which means that the > subsequent "!/extern/.../" lines are ineffectual. So, as far as Git is > concerned, /extern/bin/build is indeed ignored, thus its refusal > without --force. I think the usual way around this is to use patterns like /extern/* !/extern/bin/ !/extern/ABOUT.md see the example on the gitignore man page. Best Wishes Phillip