Skip to content

Instantly share code, notes, and snippets.

@chazer
Created December 20, 2019 04:38
Show Gist options
  • Save chazer/06dac7d61cc62a3fa92dad16d2a98df1 to your computer and use it in GitHub Desktop.
Save chazer/06dac7d61cc62a3fa92dad16d2a98df1 to your computer and use it in GitHub Desktop.
gitignore cheatsheet

The .gitignore file cheat sheet

Gitignore rules

Wildcard match

Rule RegExp Description
* ^[^/]+/?$ one file/dir name
** ^.*/?$ multiple file/dir names
/a?z/ ^/a[^/]z/$ one character
/a[0-9]z/ ^/a[0-9]z/$ one digit
/a[a-z]z/ ^/a[a-z]z/$ one letter
/a[01]z/ ^/a[01]z/$ one character from (0,1)
/a[!01]z/ ^/a[^01]z/$ one any character, except from (0,1)

Escape special character

Rule RegExp Character
a\\z /a\x5Cz/ \
a z /a\x09z/ TAB

Rules clarification

Rule Meaning Description
/name /name
/name/
root level file/dir
/name/ /name/ root level dir
name /**/name
/**/name/
any level file/dir
name/ /**/name/ any level dir
name/a /name/a
/name/a/
file/dir (full path match)
*.ext /**/*.ext
/**/*.ext/
any level file/dir
partially match
a/
!a/b
/**/a/ match dir itself
(ignore other rules)
/a/*
!/a/b
/a/**
!/a/b
!/a/b/
match dir contents,
except rule
(full path match)
a/*
!a/b
/a/**
!/**/a/b
!/**/a/b/
worst rule

Gitignore template

# Matching rules cheat sheet:
#
#  *           ~  ^[^/]+/?$                    one file/dir name
#  **          ~  ^.*/?$                       multiple file/dir names
#  /n?m/       ~  ^/n[^/]m/$                   one character
#  /n[0-9]m/   ~  ^/n[0-9]m/$                  one digit
#  /n[a-z]m/   ~  ^/n[a-z]m/$                  one letter
#  /n[01]m/    ~  ^/n[01]m/$                   one character from (0,1)
#  /n[!01]m/   ~  ^/n[^01]m/$                  one any character, except from (0,1)
#  a\\z`       ~  /a\x5Cz/                     `\` character
#  a	z`       ~  /a\x09z/                     TAB character
#  /name       =  /name, /name/                root level file/dir
#  /name/      =  /name/                       root level dir
#  name        =  /**/name, /**/name/          any level file/dir
#  name/       =  /**/name/                    any level dir
#  name/a      =  /name/a, /name/a/            file/dir (full path match)
#  *.ext       =  /**/*.ext, /**/*.ext/        any level file/dir partially match
#  a/, !a/b    =  /**/a/                       match dir itself (ignore other rules)
#  /a/*, !/a/b =  /a/**, !/a/b, !/a/b/         match dir contents, except rule (full path match)
#  a/*, !a/b   =  /a/**, !/**/a/b, !/**/a/b/   worst rule
#
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment