Git fork
at reftables-rust 243 lines 8.9 kB view raw
1gitignore(5) 2============ 3 4NAME 5---- 6gitignore - Specifies intentionally untracked files to ignore 7 8SYNOPSIS 9-------- 10$XDG_CONFIG_HOME/git/ignore, $GIT_DIR/info/exclude, .gitignore 11 12DESCRIPTION 13----------- 14 15A `gitignore` file specifies intentionally untracked files that 16Git should ignore. 17Files already tracked by Git are not affected; see the NOTES 18below for details. 19 20Each line in a `gitignore` file specifies a pattern. 21When deciding whether to ignore a path, Git normally checks 22`gitignore` patterns from multiple sources, with the following 23order of precedence, from highest to lowest (within one level of 24precedence, the last matching pattern decides the outcome): 25 26 * Patterns read from the command line for those commands that support 27 them. 28 29 * Patterns read from a `.gitignore` file in the same directory 30 as the path, or in any parent directory (up to the top-level of the working 31 tree), with patterns in the higher level files being overridden by those in 32 lower level files down to the directory containing the file. These patterns 33 match relative to the location of the `.gitignore` file. A project normally 34 includes such `.gitignore` files in its repository, containing patterns for 35 files generated as part of the project build. 36 37 * Patterns read from `$GIT_DIR/info/exclude`. 38 39 * Patterns read from the file specified by the configuration 40 variable `core.excludesFile`. 41 42Which file to place a pattern in depends on how the pattern is meant to 43be used. 44 45 * Patterns which should be version-controlled and distributed to 46 other repositories via clone (i.e., files that all developers will want 47 to ignore) should go into a `.gitignore` file. 48 49 * Patterns which are 50 specific to a particular repository but which do not need to be shared 51 with other related repositories (e.g., auxiliary files that live inside 52 the repository but are specific to one user's workflow) should go into 53 the `$GIT_DIR/info/exclude` file. 54 55 * Patterns which a user wants Git to 56 ignore in all situations (e.g., backup or temporary files generated by 57 the user's editor of choice) generally go into a file specified by 58 `core.excludesFile` in the user's `~/.gitconfig`. Its default value is 59 $XDG_CONFIG_HOME/git/ignore. If $XDG_CONFIG_HOME is either not set or 60 empty, $HOME/.config/git/ignore is used instead. 61 62The underlying Git plumbing tools, such as 63'git ls-files' and 'git read-tree', read 64`gitignore` patterns specified by command-line options, or from 65files specified by command-line options. Higher-level Git 66tools, such as 'git status' and 'git add', 67use patterns from the sources specified above. 68 69PATTERN FORMAT 70-------------- 71 72 - A blank line matches no files, so it can serve as a separator 73 for readability. 74 75 - A line starting with # serves as a comment. 76 Put a backslash ("`\`") in front of the first hash for patterns 77 that begin with a hash. 78 79 - Trailing spaces are ignored unless they are quoted with backslash 80 ("`\`"). 81 82 - An optional prefix "`!`" which negates the pattern; any 83 matching file excluded by a previous pattern will become 84 included again. It is not possible to re-include a file if a parent 85 directory of that file is excluded. Git doesn't list excluded 86 directories for performance reasons, so any patterns on contained 87 files have no effect, no matter where they are defined. 88 Put a backslash ("`\`") in front of the first "`!`" for patterns 89 that begin with a literal "`!`", for example, "`\!important!.txt`". 90 91 - The slash "`/`" is used as the directory separator. Separators may 92 occur at the beginning, middle or end of the `.gitignore` search pattern. 93 94 - If there is a separator at the beginning or middle (or both) of the 95 pattern, then the pattern is relative to the directory level of the 96 particular `.gitignore` file itself. Otherwise the pattern may also 97 match at any level below the `.gitignore` level. 98 99 - If there is a separator at the end of the pattern then the pattern 100 will only match directories, otherwise the pattern can match both 101 files and directories. 102 103 - For example, a pattern `doc/frotz/` matches `doc/frotz` directory, 104 but not `a/doc/frotz` directory; however `frotz/` matches `frotz` 105 and `a/frotz` that is a directory (all paths are relative from 106 the `.gitignore` file). 107 108 - An asterisk "`*`" matches anything except a slash. 109 The character "`?`" matches any one character except "`/`". 110 The range notation, e.g. `[a-zA-Z]`, can be used to match 111 one of the characters in a range. See fnmatch(3) and the 112 FNM_PATHNAME flag for a more detailed description. 113 114Two consecutive asterisks ("`**`") in patterns matched against 115full pathname may have special meaning: 116 117 - A leading "`**`" followed by a slash means match in all 118 directories. For example, "`**/foo`" matches file or directory 119 "`foo`" anywhere, the same as pattern "`foo`". "`**/foo/bar`" 120 matches file or directory "`bar`" anywhere that is directly 121 under directory "`foo`". 122 123 - A trailing "`/**`" matches everything inside. For example, 124 "`abc/**`" matches all files inside directory "`abc`", relative 125 to the location of the `.gitignore` file, with infinite depth. 126 127 - A slash followed by two consecutive asterisks then a slash 128 matches zero or more directories. For example, "`a/**/b`" 129 matches "`a/b`", "`a/x/b`", "`a/x/y/b`" and so on. 130 131 - Other consecutive asterisks are considered regular asterisks and 132 will match according to the previous rules. 133 134CONFIGURATION 135------------- 136 137The optional configuration variable `core.excludesFile` indicates a path to a 138file containing patterns of file names to exclude, similar to 139`$GIT_DIR/info/exclude`. Patterns in the exclude file are used in addition to 140those in `$GIT_DIR/info/exclude`. 141 142NOTES 143----- 144 145The purpose of gitignore files is to ensure that certain files 146not tracked by Git remain untracked. 147 148To stop tracking a file that is currently tracked, use 149'git rm --cached' to remove the file from the index. The filename 150can then be added to the `.gitignore` file to stop the file from 151being reintroduced in later commits. 152 153Git does not follow symbolic links when accessing a `.gitignore` file in 154the working tree. This keeps behavior consistent when the file is 155accessed from the index or a tree versus from the filesystem. 156 157EXAMPLES 158-------- 159 160 - The pattern `hello.*` matches any file or directory 161 whose name begins with `hello.`. If one wants to restrict 162 this only to the directory and not in its subdirectories, 163 one can prepend the pattern with a slash, i.e. `/hello.*`; 164 the pattern now matches `hello.txt`, `hello.c` but not 165 `a/hello.java`. 166 167 - The pattern `foo/` will match a directory `foo` and 168 paths underneath it, but will not match a regular file 169 or a symbolic link `foo` (this is consistent with the 170 way how pathspec works in general in Git) 171 172 - The pattern `doc/frotz` and `/doc/frotz` have the same effect 173 in any `.gitignore` file. In other words, a leading slash 174 is not relevant if there is already a middle slash in 175 the pattern. 176 177 - The pattern `foo/*`, matches `foo/test.json` 178 (a regular file), `foo/bar` (a directory), but it does not match 179 `foo/bar/hello.c` (a regular file), as the asterisk in the 180 pattern does not match `bar/hello.c` which has a slash in it. 181 182-------------------------------------------------------------- 183 $ git status 184 [...] 185 # Untracked files: 186 [...] 187 # Documentation/foo.html 188 # Documentation/gitignore.html 189 # file.o 190 # lib.a 191 # src/internal.o 192 [...] 193 $ cat .git/info/exclude 194 # ignore objects and archives, anywhere in the tree. 195 *.[oa] 196 $ cat Documentation/.gitignore 197 # ignore generated html files, 198 *.html 199 # except foo.html which is maintained by hand 200 !foo.html 201 $ git status 202 [...] 203 # Untracked files: 204 [...] 205 # Documentation/foo.html 206 [...] 207-------------------------------------------------------------- 208 209Another example: 210 211-------------------------------------------------------------- 212 $ cat .gitignore 213 vmlinux* 214 $ ls arch/foo/kernel/vm* 215 arch/foo/kernel/vmlinux.lds.S 216 $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore 217-------------------------------------------------------------- 218 219The second .gitignore prevents Git from ignoring 220`arch/foo/kernel/vmlinux.lds.S`. 221 222Example to exclude everything except a specific directory `foo/bar` 223(note the `/*` - without the slash, the wildcard would also exclude 224everything within `foo/bar`): 225 226-------------------------------------------------------------- 227 $ cat .gitignore 228 # exclude everything except directory foo/bar 229 /* 230 !/foo 231 /foo/* 232 !/foo/bar 233-------------------------------------------------------------- 234 235SEE ALSO 236-------- 237linkgit:git-rm[1], 238linkgit:gitrepository-layout[5], 239linkgit:git-check-ignore[1] 240 241GIT 242--- 243Part of the linkgit:git[1] suite