| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 1 | gitignore(5) | 
 | 2 | ============ | 
 | 3 |  | 
 | 4 | NAME | 
 | 5 | ---- | 
 | 6 | gitignore - Specifies intentionally untracked files to ignore | 
 | 7 |  | 
 | 8 | SYNOPSIS | 
 | 9 | -------- | 
| Junio C Hamano | c5bd79e | 2014-01-27 21:31:26 | [diff] [blame] | 10 | $HOME/.config/git/ignore, $GIT_DIR/info/exclude, .gitignore | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 11 |  | 
 | 12 | DESCRIPTION | 
 | 13 | ----------- | 
 | 14 |  | 
 | 15 | A `gitignore` file specifies intentionally untracked files that | 
| Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 16 | Git should ignore. | 
 | 17 | Files already tracked by Git are not affected; see the NOTES | 
| Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 18 | below for details. | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 19 |  | 
| Junio C Hamano | 915cd9b | 2008-07-20 01:24:17 | [diff] [blame] | 20 | Each line in a `gitignore` file specifies a pattern. | 
| Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 21 | When deciding whether to ignore a path, Git normally checks | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 22 | `gitignore` patterns from multiple sources, with the following | 
| Junio C Hamano | de9879a | 2007-07-22 09:33:42 | [diff] [blame] | 23 | order of precedence, from highest to lowest (within one level of | 
 | 24 | precedence, the last matching pattern decides the outcome): | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 25 |  | 
| Junio C Hamano | de9879a | 2007-07-22 09:33:42 | [diff] [blame] | 26 |  * Patterns read from the command line for those commands that support | 
 | 27 |  them. | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 28 |  | 
 | 29 |  * Patterns read from a `.gitignore` file in the same directory | 
| Junio C Hamano | de9879a | 2007-07-22 09:33:42 | [diff] [blame] | 30 |  as the path, or in any parent directory, with patterns in the | 
| Junio C Hamano | b4a9ede | 2009-04-08 07:36:32 | [diff] [blame] | 31 |  higher level files (up to the toplevel of the work tree) being overridden | 
 | 32 |  by those in lower level files down to the directory containing the file. | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 33 |  These patterns match relative to the location of the | 
 | 34 |  `.gitignore` file. A project normally includes such | 
 | 35 |  `.gitignore` files in its repository, containing patterns for | 
 | 36 |  files generated as part of the project build. | 
 | 37 |  | 
| Junio C Hamano | de9879a | 2007-07-22 09:33:42 | [diff] [blame] | 38 |  * Patterns read from `$GIT_DIR/info/exclude`. | 
 | 39 |  | 
 | 40 |  * Patterns read from the file specified by the configuration | 
| Junio C Hamano | 042f214 | 2016-06-27 18:05:05 | [diff] [blame] | 41 |  variable `core.excludesFile`. | 
| Junio C Hamano | de9879a | 2007-07-22 09:33:42 | [diff] [blame] | 42 |  | 
| Junio C Hamano | 99dc24a | 2008-03-27 23:49:50 | [diff] [blame] | 43 | Which file to place a pattern in depends on how the pattern is meant to | 
| Junio C Hamano | 4f07aec | 2012-09-25 19:08:44 | [diff] [blame] | 44 | be used. | 
 | 45 |  | 
 | 46 |  * Patterns which should be version-controlled and distributed to | 
 | 47 |  other repositories via clone (i.e., files that all developers will want | 
 | 48 |  to ignore) should go into a `.gitignore` file. | 
 | 49 |  | 
 | 50 |  * Patterns which are | 
 | 51 |  specific to a particular repository but which do not need to be shared | 
 | 52 |  with other related repositories (e.g., auxiliary files that live inside | 
 | 53 |  the repository but are specific to one user's workflow) should go into | 
 | 54 |  the `$GIT_DIR/info/exclude` file. | 
 | 55 |  | 
| Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 56 |  * Patterns which a user wants Git to | 
| Junio C Hamano | 4f07aec | 2012-09-25 19:08:44 | [diff] [blame] | 57 |  ignore in all situations (e.g., backup or temporary files generated by | 
 | 58 |  the user's editor of choice) generally go into a file specified by | 
| Junio C Hamano | 322c624 | 2015-03-23 21:32:46 | [diff] [blame] | 59 |  `core.excludesFile` in the user's `~/.gitconfig`. Its default value is | 
| Junio C Hamano | 4f07aec | 2012-09-25 19:08:44 | [diff] [blame] | 60 |  $XDG_CONFIG_HOME/git/ignore. If $XDG_CONFIG_HOME is either not set or | 
 | 61 |  empty, $HOME/.config/git/ignore is used instead. | 
| Junio C Hamano | 99dc24a | 2008-03-27 23:49:50 | [diff] [blame] | 62 |  | 
| Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 63 | The underlying Git plumbing tools, such as | 
| Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 64 | 'git ls-files' and 'git read-tree', read | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 65 | `gitignore` patterns specified by command-line options, or from | 
| Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 66 | files specified by command-line options. Higher-level Git | 
| Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 67 | tools, such as 'git status' and 'git add', | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 68 | use patterns from the sources specified above. | 
 | 69 |  | 
| Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 70 | PATTERN FORMAT | 
 | 71 | -------------- | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 72 |  | 
 | 73 |  - A blank line matches no files, so it can serve as a separator | 
 | 74 |  for readability. | 
 | 75 |  | 
 | 76 |  - A line starting with # serves as a comment. | 
| Junio C Hamano | 6631a09 | 2012-10-10 22:50:57 | [diff] [blame] | 77 |  Put a backslash ("`\`") in front of the first hash for patterns | 
 | 78 |  that begin with a hash. | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 79 |  | 
| Junio C Hamano | d701ba3 | 2014-11-06 23:18:05 | [diff] [blame] | 80 |  - Trailing spaces are ignored unless they are quoted with backslash | 
| Junio C Hamano | 81703b2 | 2014-03-14 22:00:27 | [diff] [blame] | 81 |  ("`\`"). | 
 | 82 |  | 
| Junio C Hamano | 6631a09 | 2012-10-10 22:50:57 | [diff] [blame] | 83 |  - An optional prefix "`!`" which negates the pattern; any | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 84 |  matching file excluded by a previous pattern will become | 
| Junio C Hamano | 7abb875 | 2016-03-18 22:52:54 | [diff] [blame] | 85 |  included again. It is not possible to re-include a file if a parent | 
 | 86 |  directory of that file is excluded. Git doesn't list excluded | 
 | 87 |  directories for performance reasons, so any patterns on contained | 
 | 88 |  files have no effect, no matter where they are defined. | 
| Junio C Hamano | 6631a09 | 2012-10-10 22:50:57 | [diff] [blame] | 89 |  Put a backslash ("`\`") in front of the first "`!`" for patterns | 
 | 90 |  that begin with a literal "`!`", for example, "`\!important!.txt`". | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 91 |  | 
| Junio C Hamano | 26e590a | 2008-02-17 03:53:51 | [diff] [blame] | 92 |  - If the pattern ends with a slash, it is removed for the | 
 | 93 |  purpose of the following description, but it would only find | 
 | 94 |  a match with a directory. In other words, `foo/` will match a | 
 | 95 |  directory `foo` and paths underneath it, but will not match a | 
 | 96 |  regular file or a symbolic link `foo` (this is consistent | 
| Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 97 |  with the way how pathspec works in general in Git). | 
| Junio C Hamano | 26e590a | 2008-02-17 03:53:51 | [diff] [blame] | 98 |  | 
| Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 99 |  - If the pattern does not contain a slash '/', Git treats it as | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 100 |  a shell glob pattern and checks for a match against the | 
| Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 101 |  pathname relative to the location of the `.gitignore` file | 
 | 102 |  (relative to the toplevel of the work tree if not from a | 
 | 103 |  `.gitignore` file). | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 104 |  | 
| Junio C Hamano | 90fd88e | 2018-02-16 17:49:44 | [diff] [blame^] | 105 |  - Otherwise, Git treats the pattern as a shell glob: "`*`" matches | 
 | 106 |  anything except "`/`", "`?`" matches any one character except "`/`" | 
 | 107 |  and "`[]`" matches one character in a selected range. See | 
 | 108 |  fnmatch(3) and the FNM_PATHNAME flag for a more detailed | 
 | 109 |  description. | 
| Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 110 |  | 
 | 111 |  - A leading slash matches the beginning of the pathname. | 
| Junio C Hamano | 2db3e75 | 2010-09-03 21:33:06 | [diff] [blame] | 112 |  For example, "/{asterisk}.c" matches "cat-file.c" but not | 
| Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 113 |  "mozilla-sha1/sha1.c". | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 114 |  | 
| Junio C Hamano | c087f14 | 2013-01-10 23:38:50 | [diff] [blame] | 115 | Two consecutive asterisks ("`**`") in patterns matched against | 
 | 116 | full pathname may have special meaning: | 
 | 117 |  | 
 | 118 |  - A leading "`**`" followed by a slash means match in all | 
 | 119 |  directories. For example, "`**/foo`" matches file or directory | 
| Junio C Hamano | 83e0e0b | 2013-11-08 00:30:52 | [diff] [blame] | 120 |  "`foo`" anywhere, the same as pattern "`foo`". "`**/foo/bar`" | 
| Junio C Hamano | c087f14 | 2013-01-10 23:38:50 | [diff] [blame] | 121 |  matches file or directory "`bar`" anywhere that is directly | 
 | 122 |  under directory "`foo`". | 
 | 123 |  | 
| Junio C Hamano | 83e0e0b | 2013-11-08 00:30:52 | [diff] [blame] | 124 |  - A trailing "`/**`" matches everything inside. For example, | 
 | 125 |  "`abc/**`" matches all files inside directory "`abc`", relative | 
| Junio C Hamano | c087f14 | 2013-01-10 23:38:50 | [diff] [blame] | 126 |  to the location of the `.gitignore` file, with infinite depth. | 
 | 127 |  | 
 | 128 |  - A slash followed by two consecutive asterisks then a slash | 
 | 129 |  matches zero or more directories. For example, "`a/**/b`" | 
 | 130 |  matches "`a/b`", "`a/x/b`", "`a/x/y/b`" and so on. | 
 | 131 |  | 
 | 132 |  - Other consecutive asterisks are considered invalid. | 
 | 133 |  | 
| Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 134 | NOTES | 
 | 135 | ----- | 
 | 136 |  | 
 | 137 | The purpose of gitignore files is to ensure that certain files | 
| Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 138 | not tracked by Git remain untracked. | 
| Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 139 |  | 
| Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 140 | To stop tracking a file that is currently tracked, use | 
 | 141 | 'git rm --cached'. | 
 | 142 |  | 
 | 143 | EXAMPLES | 
 | 144 | -------- | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 145 |  | 
 | 146 | -------------------------------------------------------------- | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 147 |  $ git status | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 148 |  [...] | 
 | 149 |  # Untracked files: | 
 | 150 |  [...] | 
 | 151 |  # Documentation/foo.html | 
 | 152 |  # Documentation/gitignore.html | 
 | 153 |  # file.o | 
 | 154 |  # lib.a | 
 | 155 |  # src/internal.o | 
 | 156 |  [...] | 
 | 157 |  $ cat .git/info/exclude | 
 | 158 |  # ignore objects and archives, anywhere in the tree. | 
 | 159 |  *.[oa] | 
 | 160 |  $ cat Documentation/.gitignore | 
 | 161 |  # ignore generated html files, | 
 | 162 |  *.html | 
 | 163 |  # except foo.html which is maintained by hand | 
 | 164 |  !foo.html | 
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 165 |  $ git status | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 166 |  [...] | 
 | 167 |  # Untracked files: | 
 | 168 |  [...] | 
 | 169 |  # Documentation/foo.html | 
 | 170 |  [...] | 
 | 171 | -------------------------------------------------------------- | 
 | 172 |  | 
 | 173 | Another example: | 
 | 174 |  | 
 | 175 | -------------------------------------------------------------- | 
 | 176 |  $ cat .gitignore | 
 | 177 |  vmlinux* | 
 | 178 |  $ ls arch/foo/kernel/vm* | 
 | 179 |  arch/foo/kernel/vmlinux.lds.S | 
 | 180 |  $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore | 
 | 181 | -------------------------------------------------------------- | 
 | 182 |  | 
| Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 183 | The second .gitignore prevents Git from ignoring | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 184 | `arch/foo/kernel/vmlinux.lds.S`. | 
 | 185 |  | 
| Junio C Hamano | cf77b04 | 2013-12-17 23:54:21 | [diff] [blame] | 186 | Example to exclude everything except a specific directory `foo/bar` | 
 | 187 | (note the `/*` - without the slash, the wildcard would also exclude | 
 | 188 | everything within `foo/bar`): | 
 | 189 |  | 
 | 190 | -------------------------------------------------------------- | 
 | 191 |  $ cat .gitignore | 
 | 192 |  # exclude everything except directory foo/bar | 
 | 193 |  /* | 
 | 194 |  !/foo | 
 | 195 |  /foo/* | 
 | 196 |  !/foo/bar | 
 | 197 | -------------------------------------------------------------- | 
 | 198 |  | 
| Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 199 | SEE ALSO | 
 | 200 | -------- | 
| Junio C Hamano | 36d5229 | 2013-01-25 21:32:36 | [diff] [blame] | 201 | linkgit:git-rm[1], | 
| Junio C Hamano | 36d5229 | 2013-01-25 21:32:36 | [diff] [blame] | 202 | linkgit:gitrepository-layout[5], | 
 | 203 | linkgit:git-check-ignore[1] | 
| Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 204 |  | 
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 205 | GIT | 
 | 206 | --- | 
| Junio C Hamano | f7c042d | 2008-06-06 22:50:53 | [diff] [blame] | 207 | Part of the linkgit:git[1] suite |