| 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 |
| 44 | be used. Patterns which should be version-controlled and distributed to |
| 45 | other repositories via clone (i.e., files that all developers will want |
| 46 | to ignore) should go into a `.gitignore` file. Patterns which are |
| 47 | specific to a particular repository but which do not need to be shared |
| 48 | with other related repositories (e.g., auxiliary files that live inside |
| 49 | the repository but are specific to one user's workflow) should go into |
| 50 | the `$GIT_DIR/info/exclude` file. Patterns which a user wants git to |
| 51 | ignore in all situations (e.g., backup or temporary files generated by |
| 52 | the user's editor of choice) generally go into a file specified by |
| Junio C Hamano | 8edb4c7 | 2012-07-09 20:33:55 | [diff] [blame] | 53 | `core.excludesfile` in the user's `~/.gitconfig`. Its default value is |
| 54 | $XDG_CONFIG_HOME/git/ignore. If $XDG_CONFIG_HOME is either not set or empty, |
| 55 | $HOME/.config/git/ignore is used instead. |
| Junio C Hamano | 99dc24a | 2008-03-27 23:49:50 | [diff] [blame] | 56 | |
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 57 | The underlying git plumbing tools, such as |
| Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 58 | 'git ls-files' and 'git read-tree', read |
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 59 | `gitignore` patterns specified by command-line options, or from |
| 60 | files specified by command-line options. Higher-level git |
| Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 61 | tools, such as 'git status' and 'git add', |
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 62 | use patterns from the sources specified above. |
| 63 | |
| Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 64 | PATTERN FORMAT |
| 65 | -------------- |
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 66 | |
| 67 | - A blank line matches no files, so it can serve as a separator |
| 68 | for readability. |
| 69 | |
| 70 | - A line starting with # serves as a comment. |
| 71 | |
| 72 | - An optional prefix '!' which negates the pattern; any |
| 73 | matching file excluded by a previous pattern will become |
| Junio C Hamano | de9879a | 2007-07-22 09:33:42 | [diff] [blame] | 74 | included again. If a negated pattern matches, this will |
| 75 | override lower precedence patterns sources. |
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 76 | |
| Junio C Hamano | 26e590a | 2008-02-17 03:53:51 | [diff] [blame] | 77 | - If the pattern ends with a slash, it is removed for the |
| 78 | purpose of the following description, but it would only find |
| 79 | a match with a directory. In other words, `foo/` will match a |
| 80 | directory `foo` and paths underneath it, but will not match a |
| 81 | regular file or a symbolic link `foo` (this is consistent |
| 82 | with the way how pathspec works in general in git). |
| 83 | |
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 84 | - If the pattern does not contain a slash '/', git treats it as |
| 85 | a shell glob pattern and checks for a match against the |
| Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 86 | pathname relative to the location of the `.gitignore` file |
| 87 | (relative to the toplevel of the work tree if not from a |
| 88 | `.gitignore` file). |
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 89 | |
| 90 | - Otherwise, git treats the pattern as a shell glob suitable |
| 91 | for consumption by fnmatch(3) with the FNM_PATHNAME flag: |
| 92 | wildcards in the pattern will not match a / in the pathname. |
| Junio C Hamano | 2db3e75 | 2010-09-03 21:33:06 | [diff] [blame] | 93 | For example, "Documentation/{asterisk}.html" matches |
| Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 94 | "Documentation/git.html" but not "Documentation/ppc/ppc.html" |
| 95 | or "tools/perf/Documentation/perf.html". |
| 96 | |
| 97 | - A leading slash matches the beginning of the pathname. |
| Junio C Hamano | 2db3e75 | 2010-09-03 21:33:06 | [diff] [blame] | 98 | For example, "/{asterisk}.c" matches "cat-file.c" but not |
| Junio C Hamano | a574a09 | 2010-06-13 19:57:10 | [diff] [blame] | 99 | "mozilla-sha1/sha1.c". |
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 100 | |
| Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 101 | NOTES |
| 102 | ----- |
| 103 | |
| 104 | The purpose of gitignore files is to ensure that certain files |
| 105 | not tracked by git remain untracked. |
| 106 | |
| 107 | To ignore uncommitted changes in a file that is already tracked, |
| 108 | use 'git update-index {litdd}assume-unchanged'. |
| 109 | |
| 110 | To stop tracking a file that is currently tracked, use |
| 111 | 'git rm --cached'. |
| 112 | |
| 113 | EXAMPLES |
| 114 | -------- |
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 115 | |
| 116 | -------------------------------------------------------------- |
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 117 | $ git status |
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 118 | [...] |
| 119 | # Untracked files: |
| 120 | [...] |
| 121 | # Documentation/foo.html |
| 122 | # Documentation/gitignore.html |
| 123 | # file.o |
| 124 | # lib.a |
| 125 | # src/internal.o |
| 126 | [...] |
| 127 | $ cat .git/info/exclude |
| 128 | # ignore objects and archives, anywhere in the tree. |
| 129 | *.[oa] |
| 130 | $ cat Documentation/.gitignore |
| 131 | # ignore generated html files, |
| 132 | *.html |
| 133 | # except foo.html which is maintained by hand |
| 134 | !foo.html |
| Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 135 | $ git status |
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 136 | [...] |
| 137 | # Untracked files: |
| 138 | [...] |
| 139 | # Documentation/foo.html |
| 140 | [...] |
| 141 | -------------------------------------------------------------- |
| 142 | |
| 143 | Another example: |
| 144 | |
| 145 | -------------------------------------------------------------- |
| 146 | $ cat .gitignore |
| 147 | vmlinux* |
| 148 | $ ls arch/foo/kernel/vm* |
| 149 | arch/foo/kernel/vmlinux.lds.S |
| 150 | $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore |
| 151 | -------------------------------------------------------------- |
| 152 | |
| 153 | The second .gitignore prevents git from ignoring |
| 154 | `arch/foo/kernel/vmlinux.lds.S`. |
| 155 | |
| Junio C Hamano | 2e6ded8 | 2010-12-05 06:20:48 | [diff] [blame] | 156 | SEE ALSO |
| 157 | -------- |
| 158 | linkgit:git-rm[1], linkgit:git-update-index[1], |
| 159 | linkgit:gitrepository-layout[5] |
| 160 | |
| Junio C Hamano | 679d22d | 2007-06-02 21:13:44 | [diff] [blame] | 161 | GIT |
| 162 | --- |
| Junio C Hamano | f7c042d | 2008-06-06 22:50:53 | [diff] [blame] | 163 | Part of the linkgit:git[1] suite |