Volume XXII, number 280Wednesday, October 7, 2026Latest message 53 minutes ago

The Git List

News and archive of git@vger.kernel.org, since April 2005

gitignore documentation for info/exclude files and patterns with relative directories

3 messages between Mar 27, 2026 and Mar 28, 2026, from Dan Drake, Junio C Hamano, Shreyansh Paliwal.

Plain Markdown or JSON for tools and agents.

Dan DrakeMar 27, 2026, 11:20 UTC on lore
Hello,
In the "pattern format" section of the gitignore manpage, it says:
Show 7 quoted lines
> The slash "/" is used as the directory separator. Separators may occur at the
> beginning, middle or end of the .gitignore search pattern.
>
> If there is a separator at the beginning or middle (or both) of the pattern,
> then the pattern is relative to the directory level of the particular
> .gitignore file itself. Otherwise the pattern may also match at any
> level below the .gitignore level.

For a .git/info/exclude file, the above makes it sound like the pattern will be relative to that .git/info directory, so that you would need to use this kind of p attern to match files starting with 'foo' in the root of the repo:

../../foo*

However, it seems that for patterns in the info/exclude file, the beginning slash anchors the pattern to the root of the repo; the above pattern in that file should be '/foo*'.

The documentation should mention this behavior for info/exclude, as well as the core.excludesFile.

Dan

-- Ceci n'est pas une .signature.

Junio C HamanoMar 27, 2026, 16:18 UTC in reply to Dan Drake on lore

Re: gitignore documentation for info/exclude files and patterns with relative directories

Dan Drake <dan@dandrake.org> writes:
> The documentation should mention this behavior for info/exclude, as well as 
> the core.excludesFile.

Yup, my mistake more than 20-year-old that nobody complained so far ;-)

Yes, these exclude pattern sources that are outside the working tree behave as if they are specified at the root level of the working tree.

Patches welcome. Thanks.
Shreyansh PaliwalMar 28, 2026, 15:21 UTC in reply to Junio C Hamano on lore

[PATCH] doc: gitignore: clarify pattern base for info/exclude and core.excludesFile

The pattern format section describes how patterns are interpreted relative to the location of a .gitignore file, but does not mention the behavior for exclude sources outside the working tree.

Clarify that patterns from $GIT_DIR/info/exclude and core.excludesFile are treated as if they are specified at the root of the working tree, so a leading '/' anchors matches at the repository root.

Reported-by: Dan Drake <dan@dandrake.org>
Signed-off-by: Shreyansh Paliwal <shreyanshpaliwalcmsmn@gmail.com>
---
 Documentation/gitignore.adoc | 5 +++++
 1 file changed, 5 insertions(+)
diff --git a/Documentation/gitignore.adoc b/Documentation/gitignore.adoc
index 9fccab4ae8..a3d24e5c34 100644
--- a/Documentation/gitignore.adoc
+++ b/Documentation/gitignore.adoc
@@ -96,6 +96,11 @@ PATTERN FORMAT
    particular `.gitignore` file itself. Otherwise the pattern may also
    match at any level below the `.gitignore` level.
 
+ - Patterns read from exclude sources that are outside the working tree,
+   such as $GIT_DIR/info/exclude and core.excludesFile, are treated as if
+   they are specified at the root of the working tree, i.e. a leading "/"
+   in such patterns anchors the match at the root of the repository.
+
  - If there is a separator at the end of the pattern then the pattern
    will only match directories, otherwise the pattern can match both
    files and directories.
-- 
2.53.0

Back to recent threads