| gitignore(5) |
| ============ |
| |
| NAME |
| ---- |
| gitignore - Specifies intentionally untracked files to ignore |
| |
| SYNOPSIS |
| -------- |
| $GIT_DIR/info/exclude, .gitignore |
| |
| DESCRIPTION |
| ----------- |
| |
| A `gitignore` file specifies intentionally untracked files that |
| git should ignore. |
| Note that all the `gitignore` files really concern only files |
| that are not already tracked by git; |
| in order to ignore uncommitted changes in already tracked files, |
| please refer to the 'git update-index --assume-unchanged' |
| documentation. |
| |
| Each line in a `gitignore` file specifies a pattern. |
| When deciding whether to ignore a path, git normally checks |
| `gitignore` patterns from multiple sources, with the following |
| order of precedence, from highest to lowest (within one level of |
| precedence, the last matching pattern decides the outcome): |
| |
| * Patterns read from the command line for those commands that support |
| them. |
| |
| * Patterns read from a `.gitignore` file in the same directory |
| as the path, or in any parent directory, with patterns in the |
| higher level files (up to the toplevel of the work tree) being overridden |
| by those in lower level files down to the directory containing the file. |
| These patterns match relative to the location of the |
| `.gitignore` file. A project normally includes such |
| `.gitignore` files in its repository, containing patterns for |
| files generated as part of the project build. |
| |
| * Patterns read from `$GIT_DIR/info/exclude`. |
| |
| * Patterns read from the file specified by the configuration |
| variable 'core.excludesfile'. |
| |
| Which file to place a pattern in depends on how the pattern is meant to |
| be used. Patterns which should be version-controlled and distributed to |
| other repositories via clone (i.e., files that all developers will want |
| to ignore) should go into a `.gitignore` file. Patterns which are |
| specific to a particular repository but which do not need to be shared |
| with other related repositories (e.g., auxiliary files that live inside |
| the repository but are specific to one user's workflow) should go into |
| the `$GIT_DIR/info/exclude` file. Patterns which a user wants git to |
| ignore in all situations (e.g., backup or temporary files generated by |
| the user's editor of choice) generally go into a file specified by |
| `core.excludesfile` in the user's `~/.gitconfig`. |
| |
| The underlying git plumbing tools, such as |
| 'git ls-files' and 'git read-tree', read |
| `gitignore` patterns specified by command-line options, or from |
| files specified by command-line options. Higher-level git |
| tools, such as 'git status' and 'git add', |
| use patterns from the sources specified above. |
| |
| Patterns have the following format: |
| |
| - A blank line matches no files, so it can serve as a separator |
| for readability. |
| |
| - A line starting with # serves as a comment. |
| |
| - An optional prefix '!' which negates the pattern; any |
| matching file excluded by a previous pattern will become |
| included again. If a negated pattern matches, this will |
| override lower precedence patterns sources. |
| |
| - If the pattern ends with a slash, it is removed for the |
| purpose of the following description, but it would only find |
| a match with a directory. In other words, `foo/` will match a |
| directory `foo` and paths underneath it, but will not match a |
| regular file or a symbolic link `foo` (this is consistent |
| with the way how pathspec works in general in git). |
| |
| - If the pattern does not contain a slash '/', git treats it as |
| a shell glob pattern and checks for a match against the |
| pathname without leading directories. |
| |
| - Otherwise, git treats the pattern as a shell glob suitable |
| for consumption by fnmatch(3) with the FNM_PATHNAME flag: |
| wildcards in the pattern will not match a / in the pathname. |
| For example, "Documentation/\*.html" matches |
| "Documentation/git.html" but not |
| "Documentation/ppc/ppc.html". A leading slash matches the |
| beginning of the pathname; for example, "/*.c" matches |
| "cat-file.c" but not "mozilla-sha1/sha1.c". |
| |
| An example: |
| |
| -------------------------------------------------------------- |
| $ git status |
| [...] |
| # Untracked files: |
| [...] |
| # Documentation/foo.html |
| # Documentation/gitignore.html |
| # file.o |
| # lib.a |
| # src/internal.o |
| [...] |
| $ cat .git/info/exclude |
| # ignore objects and archives, anywhere in the tree. |
| *.[oa] |
| $ cat Documentation/.gitignore |
| # ignore generated html files, |
| *.html |
| # except foo.html which is maintained by hand |
| !foo.html |
| $ git status |
| [...] |
| # Untracked files: |
| [...] |
| # Documentation/foo.html |
| [...] |
| -------------------------------------------------------------- |
| |
| Another example: |
| |
| -------------------------------------------------------------- |
| $ cat .gitignore |
| vmlinux* |
| $ ls arch/foo/kernel/vm* |
| arch/foo/kernel/vmlinux.lds.S |
| $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore |
| -------------------------------------------------------------- |
| |
| The second .gitignore prevents git from ignoring |
| `arch/foo/kernel/vmlinux.lds.S`. |
| |
| Documentation |
| ------------- |
| Documentation by David Greaves, Junio C Hamano, Josh Triplett, |
| Frank Lichtenheld, and the git-list <git@vger.kernel.org>. |
| |
| GIT |
| --- |
| Part of the linkgit:git[1] suite |