]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/gitignore.txt
tests: rename duplicate t1009
[thirdparty/git.git] / Documentation / gitignore.txt
CommitLineData
cedb8d5d
JT
1gitignore(5)
2============
3
4NAME
5----
6gitignore - Specifies intentionally untracked files to ignore
7
8SYNOPSIS
9--------
10$GIT_DIR/info/exclude, .gitignore
11
12DESCRIPTION
13-----------
14
15A `gitignore` file specifies intentionally untracked files that
6259ac66
PB
16git should ignore.
17Note that all the `gitignore` files really concern only files
18that are not already tracked by git;
19in order to ignore uncommitted changes in already tracked files,
20please refer to the 'git update-index --assume-unchanged'
21documentation.
cedb8d5d 22
6259ac66 23Each line in a `gitignore` file specifies a pattern.
cedb8d5d
JT
24When deciding whether to ignore a path, git normally checks
25`gitignore` patterns from multiple sources, with the following
98ec4ad7
DK
26order of precedence, from highest to lowest (within one level of
27precedence, the last matching pattern decides the outcome):
cedb8d5d 28
98ec4ad7
DK
29 * Patterns read from the command line for those commands that support
30 them.
cedb8d5d
JT
31
32 * Patterns read from a `.gitignore` file in the same directory
98ec4ad7 33 as the path, or in any parent directory, with patterns in the
20ff3ec2
JM
34 higher level files (up to the toplevel of the work tree) being overridden
35 by those in lower level files down to the directory containing the file.
cedb8d5d
JT
36 These patterns match relative to the location of the
37 `.gitignore` file. A project normally includes such
38 `.gitignore` files in its repository, containing patterns for
39 files generated as part of the project build.
40
98ec4ad7
DK
41 * Patterns read from `$GIT_DIR/info/exclude`.
42
43 * Patterns read from the file specified by the configuration
44 variable 'core.excludesfile'.
45
90b22907
JK
46Which file to place a pattern in depends on how the pattern is meant to
47be used. Patterns which should be version-controlled and distributed to
48other repositories via clone (i.e., files that all developers will want
49to ignore) should go into a `.gitignore` file. Patterns which are
50specific to a particular repository but which do not need to be shared
51with other related repositories (e.g., auxiliary files that live inside
52the repository but are specific to one user's workflow) should go into
53the `$GIT_DIR/info/exclude` file. Patterns which a user wants git to
54ignore in all situations (e.g., backup or temporary files generated by
55the user's editor of choice) generally go into a file specified by
56`core.excludesfile` in the user's `~/.gitconfig`.
57
cedb8d5d 58The underlying git plumbing tools, such as
ba020ef5 59'git-ls-files' and 'git-read-tree', read
cedb8d5d
JT
60`gitignore` patterns specified by command-line options, or from
61files specified by command-line options. Higher-level git
ba020ef5 62tools, such as 'git-status' and 'git-add',
cedb8d5d
JT
63use patterns from the sources specified above.
64
65Patterns have the following format:
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
98ec4ad7
DK
74 included again. If a negated pattern matches, this will
75 override lower precedence patterns sources.
cedb8d5d 76
d6b8fc30
JH
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
cedb8d5d
JT
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
86 pathname without leading directories.
87
88 - Otherwise, git treats the pattern as a shell glob suitable
89 for consumption by fnmatch(3) with the FNM_PATHNAME flag:
90 wildcards in the pattern will not match a / in the pathname.
91 For example, "Documentation/\*.html" matches
92 "Documentation/git.html" but not
93 "Documentation/ppc/ppc.html". A leading slash matches the
94 beginning of the pathname; for example, "/*.c" matches
95 "cat-file.c" but not "mozilla-sha1/sha1.c".
96
97An example:
98
99--------------------------------------------------------------
b1889c36 100 $ git status
cedb8d5d
JT
101 [...]
102 # Untracked files:
103 [...]
104 # Documentation/foo.html
105 # Documentation/gitignore.html
106 # file.o
107 # lib.a
108 # src/internal.o
109 [...]
110 $ cat .git/info/exclude
111 # ignore objects and archives, anywhere in the tree.
112 *.[oa]
113 $ cat Documentation/.gitignore
114 # ignore generated html files,
115 *.html
116 # except foo.html which is maintained by hand
117 !foo.html
b1889c36 118 $ git status
cedb8d5d
JT
119 [...]
120 # Untracked files:
121 [...]
122 # Documentation/foo.html
123 [...]
124--------------------------------------------------------------
125
126Another example:
127
128--------------------------------------------------------------
129 $ cat .gitignore
130 vmlinux*
131 $ ls arch/foo/kernel/vm*
132 arch/foo/kernel/vmlinux.lds.S
133 $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore
134--------------------------------------------------------------
135
136The second .gitignore prevents git from ignoring
137`arch/foo/kernel/vmlinux.lds.S`.
138
139Documentation
140-------------
141Documentation by David Greaves, Junio C Hamano, Josh Triplett,
142Frank Lichtenheld, and the git-list <git@vger.kernel.org>.
143
144GIT
145---
9e1f0a85 146Part of the linkgit:git[1] suite