]>
Commit | Line | Data |
---|---|---|
cedb8d5d JT |
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 | |
6259ac66 PB |
16 | git should ignore. |
17 | Note that all the `gitignore` files really concern only files | |
18 | that are not already tracked by git; | |
19 | in order to ignore uncommitted changes in already tracked files, | |
20 | please refer to the 'git update-index --assume-unchanged' | |
21 | documentation. | |
cedb8d5d | 22 | |
6259ac66 | 23 | Each line in a `gitignore` file specifies a pattern. |
cedb8d5d JT |
24 | When deciding whether to ignore a path, git normally checks |
25 | `gitignore` patterns from multiple sources, with the following | |
98ec4ad7 DK |
26 | order of precedence, from highest to lowest (within one level of |
27 | precedence, 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 |
46 | Which file to place a pattern in depends on how the pattern is meant to |
47 | be used. Patterns which should be version-controlled and distributed to | |
48 | other repositories via clone (i.e., files that all developers will want | |
49 | to ignore) should go into a `.gitignore` file. 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. Patterns which a user wants git to | |
54 | ignore in all situations (e.g., backup or temporary files generated by | |
55 | the user's editor of choice) generally go into a file specified by | |
56 | `core.excludesfile` in the user's `~/.gitconfig`. | |
57 | ||
cedb8d5d | 58 | The 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 |
61 | files specified by command-line options. Higher-level git | |
ba020ef5 | 62 | tools, such as 'git-status' and 'git-add', |
cedb8d5d JT |
63 | use patterns from the sources specified above. |
64 | ||
65 | Patterns 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 | ||
97 | An 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 | ||
126 | Another 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 | ||
136 | The second .gitignore prevents git from ignoring | |
137 | `arch/foo/kernel/vmlinux.lds.S`. | |
138 | ||
139 | Documentation | |
140 | ------------- | |
141 | Documentation by David Greaves, Junio C Hamano, Josh Triplett, | |
142 | Frank Lichtenheld, and the git-list <git@vger.kernel.org>. | |
143 | ||
144 | GIT | |
145 | --- | |
9e1f0a85 | 146 | Part of the linkgit:git[1] suite |