What is a .gitignore file?
text/plain
A .gitignore file tells Git which untracked paths to leave alone. Each line is a pattern: a leading `/` anchors it to the containing directory, a trailing `/` restricts it to directories, `!` re-includes a previously excluded path, `**` matches across directory boundaries, and `#` introduces a comment. Rules are evaluated in order, with the last matching pattern winning, and nested .gitignore files layer on top of parent ones.
How to use a .gitignore file
Use an example .gitignore file to test ignore-pattern engines in build tools, bundlers, linters, and container builders, checking negation ordering, anchored versus floating patterns, and directory-only rules against a documented set of expected matches.
Download example .gitignore files
- Gitignore - Node Monorepo With Re-Included ArtefactsA realistic monorepo ignore file that uses `dist/*` rather than `dist/` precisely so the two `!dist/...` re-inclusions below it can work. It also carries the `.env.*` / `!.env.example` and `*.log` / `!logs/retained/*.log` pairs that every ignore-matcher has to order correctly.
- Gitignore - Negation After a Directory Exclusion (No Effect)The single most misunderstood rule in the format: once `build/` excludes a directory, git does not descend into it, so `!build/keep.txt` is dead. The file is valid and the behaviour is documented — it is the author's expectation that is wrong, which is exactly why an ignore-matcher must reproduce it rather than being helpful.
- Gitignore - The Working Form of the Same NegationThe corrected twin: `build/*` excludes the directory's contents instead of the directory, so git still descends and `!build/keep.txt` re-includes the file. The two fixtures differ by two characters and produce opposite results, which makes them a precise pass/fail pair for an ignore engine.
- Gitignore - Globstar, Anchors and Character ClassesOne pattern per rule in the gitignore grammar: a leading slash that anchors to the containing directory, the same name unanchored, `**` in all three positions, `?` and `[...]` classes, and a trailing slash that matches only directories. Every line is a separate assertion for a matcher's test suite.
- Gitignore - Escaped #, !, Bracket and Trailing SpaceEvery escape the format defines, including the one nobody expects: a trailing space is stripped from a pattern unless it is backslash-escaped, so `draft\ ` and `draft` ignore different files. Editors that trim trailing whitespace on save silently change what this file means.