mirror of
https://github.com/git/git.git
synced 2024-12-12 03:14:11 +08:00
6259ac6628
This patch explains more carefully that `.gitignore` concerns only untracked files and refers the reader to git update-index --assume-unchanged in the need of ignoring uncommitted changes in already tracked files. The description of this option is lifted to a more "porcelainish" level and explains the caveats of this usecase. Whether feasible or not, I believe adding this functionality to the porcelain is out of the scope of this patch. (And I personally think that referring to the plumbing in the case of such a special usage is fine.) This is currently probably one of the top FAQs at #git and the --assume-unchanged switch is not widely known; gitignore(5) is the first place where people are likely to look for it. Signed-off-by: Petr Baudis <pasky@suse.cz> Signed-off-by: Junio C Hamano <gitster@pobox.com>
147 lines
5.1 KiB
Plaintext
147 lines
5.1 KiB
Plaintext
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 root) 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
|