git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] fix git add :!x exiting with error when x is in .gitignore

From
Tian Yuchen <a3205153416@gmail.com>
Date
Feb 4, 2026, 17:53 UTC
Message-ID
<9c5be231-f340-4a97-850e-d43c78b2c889@gmail.com>
In-Reply-To
<xmqqo6m4pi84.fsf@gitster.g>
On 2/5/26 00:48, Junio C Hamano wrote:
> "Remy D. Farley" <one-d-wide@protonmail.com> writes:
Show 9 quoted lines
> A question that immediately comes to mind is if it is appropriate
> for a negated pathspec element to recuse itself like this from the
> decision process and let other pathspec elements decide the fate of
> the path, or if a negated pathspec element should take a more active
> role of saying "no" (no, not by immediately returning 0, but this
> loop may have to become a two step process if we wanted to implement
> e.g., for the function to yield "yes", it has to match at least one
> positive pathspec element and zero negated one, or something like
> that).
You are right. To illustrate, if we run:
git add ignored_file ":!ignored_file"
Then following things might happen with the patch:
-> For the first item,
	- Does it match 'exclude'? No.
	- Does it match 'path'? Yes.
	- Return 1.
-> For the second item,
	- Is never reached
-> Git complain,
	'The following paths are ignored: ignored_file.'
In other word, it's not the expected silent no-op (returning 0).

As you suggested, The loop needs to verify that the path matches at least one positive item AND matches none of the negative items. A possible way to acheive it is: (Notice that we no longer return 1 in the half way)

 >bool matched_positive = false;
 >
 >for (item in pathspec) {
 >	if (item matches patch) {
 >		if (item is exclude) {
 >			return 0;
 >		} else {
 >			matched_positive = true;
 >		}
 >	}
 >}
 >
 >return matched_positive ? 1 : 0;

By the way, I think extreme cases like 'git add x :!x' should be added into the test scripts.

Regards,
Yuchen
Previous: Junio C HamanoNext: Junio C Hamano
Message 3 of 6 in “fix git add :!x exiting with error when x is in .gitignore”
  1. fix git add :!x exiting with error when x is in .gitignoreRemy D. Farley, Feb 4, 2026
  2. Junio C HamanoFeb 4, 2026
  3. Tian YuchenFeb 4, 2026
  4. Junio C HamanoFeb 4, 2026
  5. fix git add :!x exiting with error when x is in .gitignoreRemy D. Farley, Feb 4, 2026
  6. Junio C HamanoFeb 4, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.