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 | -------- |
| 10 | $GIT_DIR/info/exclude, .gitignore |
| 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 |
| 41 | variable 'core.excludesfile'. |
| 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 |
| 59 | `core.excludesfile` in the user's `~/.gitconfig`. Its default value is |
| 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 | 6631a09 | 2012-10-10 22:50:57 | [diff] [blame] | 80 | - An optional prefix "`!`" which negates the pattern; any |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 81 | matching file excluded by a previous pattern will become |
Junio C Hamano | de9879a | 2007-07-22 09:33:42 | [diff] [blame] | 82 | included again. If a negated pattern matches, this will |
| 83 | override lower precedence patterns sources. |
Junio C Hamano | 6631a09 | 2012-10-10 22:50:57 | [diff] [blame] | 84 | Put a backslash ("`\`") in front of the first "`!`" for patterns |
| 85 | that begin with a literal "`!`", for example, "`\!important!.txt`". |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 86 | |
Junio C Hamano | 26e590a | 2008-02-17 03:53:51 | [diff] [blame] | 87 | - If the pattern ends with a slash, it is removed for the |
| 88 | purpose of the following description, but it would only find |
| 89 | a match with a directory. In other words, `foo/` will match a |
| 90 | directory `foo` and paths underneath it, but will not match a |
| 91 | regular file or a symbolic link `foo` (this is consistent |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 92 | with the way how pathspec works in general in Git). |
Junio C Hamano | 26e590a | 2008-02-17 03:53:51 | [diff] [blame] | 93 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 94 | - If the pattern does not contain a slash '/', Git treats it as |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 95 | a shell glob pattern and checks for a match against the |
Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 96 | pathname relative to the location of the `.gitignore` file |
| 97 | (relative to the toplevel of the work tree if not from a |
| 98 | `.gitignore` file). |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 99 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 100 | - Otherwise, Git treats the pattern as a shell glob suitable |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 101 | for consumption by fnmatch(3) with the FNM_PATHNAME flag: |
| 102 | wildcards in the pattern will not match a / in the pathname. |
Junio C Hamano | 2db3e75 | 2010-09-03 21:33:06 | [diff] [blame] | 103 | For example, "Documentation/{asterisk}.html" matches |
Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 104 | "Documentation/git.html" but not "Documentation/ppc/ppc.html" |
| 105 | or "tools/perf/Documentation/perf.html". |
| 106 | |
| 107 | - A leading slash matches the beginning of the pathname. |
Junio C Hamano | 2db3e75 | 2010-09-03 21:33:06 | [diff] [blame] | 108 | For example, "/{asterisk}.c" matches "cat-file.c" but not |
Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 109 | "mozilla-sha1/sha1.c". |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 110 | |
Junio C Hamano | c087f14 | 2013-01-10 23:38:50 | [diff] [blame] | 111 | Two consecutive asterisks ("`**`") in patterns matched against |
| 112 | full pathname may have special meaning: |
| 113 | |
| 114 | - A leading "`**`" followed by a slash means match in all |
| 115 | directories. For example, "`**/foo`" matches file or directory |
| 116 | "`foo`" anywhere, the same as pattern "`foo`". "**/foo/bar" |
| 117 | matches file or directory "`bar`" anywhere that is directly |
| 118 | under directory "`foo`". |
| 119 | |
| 120 | - A trailing "/**" matches everything inside. For example, |
| 121 | "abc/**" matches all files inside directory "abc", relative |
| 122 | to the location of the `.gitignore` file, with infinite depth. |
| 123 | |
| 124 | - A slash followed by two consecutive asterisks then a slash |
| 125 | matches zero or more directories. For example, "`a/**/b`" |
| 126 | matches "`a/b`", "`a/x/b`", "`a/x/y/b`" and so on. |
| 127 | |
| 128 | - Other consecutive asterisks are considered invalid. |
| 129 | |
Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 130 | NOTES |
| 131 | ----- |
| 132 | |
| 133 | The purpose of gitignore files is to ensure that certain files |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 134 | not tracked by Git remain untracked. |
Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 135 | |
| 136 | To ignore uncommitted changes in a file that is already tracked, |
| 137 | use 'git update-index {litdd}assume-unchanged'. |
| 138 | |
| 139 | To stop tracking a file that is currently tracked, use |
| 140 | 'git rm --cached'. |
| 141 | |
| 142 | EXAMPLES |
| 143 | -------- |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 144 | |
| 145 | -------------------------------------------------------------- |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 146 | $ git status |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 147 | [...] |
| 148 | # Untracked files: |
| 149 | [...] |
| 150 | # Documentation/foo.html |
| 151 | # Documentation/gitignore.html |
| 152 | # file.o |
| 153 | # lib.a |
| 154 | # src/internal.o |
| 155 | [...] |
| 156 | $ cat .git/info/exclude |
| 157 | # ignore objects and archives, anywhere in the tree. |
| 158 | *.[oa] |
| 159 | $ cat Documentation/.gitignore |
| 160 | # ignore generated html files, |
| 161 | *.html |
| 162 | # except foo.html which is maintained by hand |
| 163 | !foo.html |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 164 | $ git status |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 165 | [...] |
| 166 | # Untracked files: |
| 167 | [...] |
| 168 | # Documentation/foo.html |
| 169 | [...] |
| 170 | -------------------------------------------------------------- |
| 171 | |
| 172 | Another example: |
| 173 | |
| 174 | -------------------------------------------------------------- |
| 175 | $ cat .gitignore |
| 176 | vmlinux* |
| 177 | $ ls arch/foo/kernel/vm* |
| 178 | arch/foo/kernel/vmlinux.lds.S |
| 179 | $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore |
| 180 | -------------------------------------------------------------- |
| 181 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 182 | The second .gitignore prevents Git from ignoring |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 183 | `arch/foo/kernel/vmlinux.lds.S`. |
| 184 | |
Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 185 | SEE ALSO |
| 186 | -------- |
Junio C Hamano | 36d5229 | 2013-01-25 21:32:36 | [diff] [blame] | 187 | linkgit:git-rm[1], |
| 188 | linkgit:git-update-index[1], |
| 189 | linkgit:gitrepository-layout[5], |
| 190 | linkgit:git-check-ignore[1] |
Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 191 | |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 192 | GIT |
| 193 | --- |
Junio C Hamano | f7c042d | 2008-06-06 22:50:53 | [diff] [blame] | 194 | Part of the linkgit:git[1] suite |