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 | 915cd9b | 2008-07-20 01:24:17 | [diff] [blame] | 16 | git should ignore. |
Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 17 | Files already tracked by git are not affected; see the NOTES |
| 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 | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 21 | When deciding whether to ignore a path, git normally checks |
| 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 | |
| 56 | * Patterns which a user wants git to |
| 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 | 679d22d | 2007-06-02 21:13:44 | [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 |
| 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. |
| 77 | |
| 78 | - An optional prefix '!' which negates the pattern; any |
| 79 | matching file excluded by a previous pattern will become |
Junio C Hamano | de9879a | 2007-07-22 09:33:42 | [diff] [blame] | 80 | included again. If a negated pattern matches, this will |
| 81 | override lower precedence patterns sources. |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 82 | |
Junio C Hamano | 26e590a | 2008-02-17 03:53:51 | [diff] [blame] | 83 | - If the pattern ends with a slash, it is removed for the |
| 84 | purpose of the following description, but it would only find |
| 85 | a match with a directory. In other words, `foo/` will match a |
| 86 | directory `foo` and paths underneath it, but will not match a |
| 87 | regular file or a symbolic link `foo` (this is consistent |
| 88 | with the way how pathspec works in general in git). |
| 89 | |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 90 | - If the pattern does not contain a slash '/', git treats it as |
| 91 | a shell glob pattern and checks for a match against the |
Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 92 | pathname relative to the location of the `.gitignore` file |
| 93 | (relative to the toplevel of the work tree if not from a |
| 94 | `.gitignore` file). |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 95 | |
| 96 | - Otherwise, git treats the pattern as a shell glob suitable |
| 97 | for consumption by fnmatch(3) with the FNM_PATHNAME flag: |
| 98 | wildcards in the pattern will not match a / in the pathname. |
Junio C Hamano | 2db3e75 | 2010-09-03 21:33:06 | [diff] [blame] | 99 | For example, "Documentation/{asterisk}.html" matches |
Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 100 | "Documentation/git.html" but not "Documentation/ppc/ppc.html" |
| 101 | or "tools/perf/Documentation/perf.html". |
| 102 | |
| 103 | - A leading slash matches the beginning of the pathname. |
Junio C Hamano | 2db3e75 | 2010-09-03 21:33:06 | [diff] [blame] | 104 | For example, "/{asterisk}.c" matches "cat-file.c" but not |
Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 105 | "mozilla-sha1/sha1.c". |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 106 | |
Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 107 | NOTES |
| 108 | ----- |
| 109 | |
| 110 | The purpose of gitignore files is to ensure that certain files |
| 111 | not tracked by git remain untracked. |
| 112 | |
| 113 | To ignore uncommitted changes in a file that is already tracked, |
| 114 | use 'git update-index {litdd}assume-unchanged'. |
| 115 | |
| 116 | To stop tracking a file that is currently tracked, use |
| 117 | 'git rm --cached'. |
| 118 | |
| 119 | EXAMPLES |
| 120 | -------- |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 121 | |
| 122 | -------------------------------------------------------------- |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 123 | $ git status |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 124 | [...] |
| 125 | # Untracked files: |
| 126 | [...] |
| 127 | # Documentation/foo.html |
| 128 | # Documentation/gitignore.html |
| 129 | # file.o |
| 130 | # lib.a |
| 131 | # src/internal.o |
| 132 | [...] |
| 133 | $ cat .git/info/exclude |
| 134 | # ignore objects and archives, anywhere in the tree. |
| 135 | *.[oa] |
| 136 | $ cat Documentation/.gitignore |
| 137 | # ignore generated html files, |
| 138 | *.html |
| 139 | # except foo.html which is maintained by hand |
| 140 | !foo.html |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 141 | $ git status |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 142 | [...] |
| 143 | # Untracked files: |
| 144 | [...] |
| 145 | # Documentation/foo.html |
| 146 | [...] |
| 147 | -------------------------------------------------------------- |
| 148 | |
| 149 | Another example: |
| 150 | |
| 151 | -------------------------------------------------------------- |
| 152 | $ cat .gitignore |
| 153 | vmlinux* |
| 154 | $ ls arch/foo/kernel/vm* |
| 155 | arch/foo/kernel/vmlinux.lds.S |
| 156 | $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore |
| 157 | -------------------------------------------------------------- |
| 158 | |
| 159 | The second .gitignore prevents git from ignoring |
| 160 | `arch/foo/kernel/vmlinux.lds.S`. |
| 161 | |
Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 162 | SEE ALSO |
| 163 | -------- |
| 164 | linkgit:git-rm[1], linkgit:git-update-index[1], |
| 165 | linkgit:gitrepository-layout[5] |
| 166 | |
Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 167 | GIT |
| 168 | --- |
Junio C Hamano | f7c042d | 2008-06-06 22:50:53 | [diff] [blame] | 169 | Part of the linkgit:git[1] suite |