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

Bug: git add :!x . exits with error when x is in .gitignore

From
RFRemy D. Farley <one-d-wide@protonmail.com>
Date
Jan 31, 2026, 19:43 UTC
Message-ID
<20260131194309.601838-1-one-d-wide@protonmail.com>

`git add :!x .`, which is executed as part `git stash :!x`, seems to treat pathspec with and without exclude magic the same, exiting with error when "x" is in gitignore file. If file "x" isn't present, `git add x` still exits with error as expected (although with a different one), but `git add :!x .` succeeds.

Git-add manpage doesn't specify that exclude pathspecs are treated anyhow differently from normal ones, so I'm not sure if it's really a bug. But it does seem like one. I originally tried to exclude certain files from scripted stashes using pathspec, but had to switch to reusing core.excludesFile (which is probably a better fit for my use case).

```sh
$ sh repro.sh
[...]
+ echo x >.gitignore
+ echo x >x
+ git add -- ':!x' .
Saved working directory and index state WIP on main: c8a842d Init
The following paths are ignored by one of your .gitignore files:
x
hint: Use -f if you really want to add them.
hint: Disable this message with "git config set advice.addIgnoredFile false"
+ echo exited with code 1
exited with code 1
```

```sh # repro.sh rm -rf repro; mkdir repro; cd repro trap 'echo exited with code $?' EXIT set -euo pipefail -o xtrace

git init git commit -m Init --allow-empty

# If we comment out either of the following lines, git add/stash commands below succeed echo x >.gitignore echo x >x

# Git add . is executed as part of git stash, as can be seen using strace -ffeexecve git add -- ":!x" . # fails # git stash --include-untracked -- ":!x" # fails

echo ok ```

---
 dir.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dir.c b/dir.c
index b00821f2..0026bd65 100644
--- a/dir.c
+++ b/dir.c
@@ -2264,7 +2264,7 @@ static int exclude_matches_pathspec(const char *path, int pathlen,
 {
 	int i;
 
-	if (!pathspec || !pathspec->nr)
+	if (!pathspec || !pathspec->nr || pathspec->magic & PATHSPEC_EXCLUDE)
 		return 0;
 
 	GUARD_PATHSPEC(pathspec,
-- 
2.51.2
Next: Tian Yuchen
Message 1 of 3 in “Bug: git add :!x . exits with error when x is in .gitignore”
  1. Remy D. FarleyJan 31, 2026
  2. Tian YuchenFeb 2, 2026
  3. Remy D. FarleyFeb 2, 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.