2 Tells Git if the executable bit of files in the working tree
5 Some filesystems lose the executable bit when a file that is
6 marked as executable is checked out, or checks out a
7 non-executable file with executable bit on.
8 linkgit:git-clone[1] or linkgit:git-init[1] probe the filesystem
9 to see if it handles the executable bit correctly
10 and this variable is automatically set as necessary.
12 A repository, however, may be on a filesystem that handles
13 the filemode correctly, and this variable is set to 'true'
14 when created, but later may be made accessible from another
15 environment that loses the filemode (e.g. exporting ext4 via
16 CIFS mount, visiting a Cygwin created repository with
17 Git for Windows or Eclipse).
18 In such a case it may be necessary to set this variable to 'false'.
19 See linkgit:git-update-index[1].
21 The default is true (when core.filemode is not specified in the config file).
24 (Windows-only) If true, mark newly-created directories and files whose
25 name starts with a dot as hidden. If 'dotGitOnly', only the `.git/`
26 directory is hidden, but no other files starting with a dot. The
27 default mode is 'dotGitOnly'.
30 Internal variable which enables various workarounds to enable
31 Git to work better on filesystems that are not case sensitive,
32 like APFS, HFS+, FAT, NTFS, etc. For example, if a directory listing
33 finds "makefile" when Git expects "Makefile", Git will assume
34 it is really the same file, and continue to remember it as
37 The default is false, except linkgit:git-clone[1] or linkgit:git-init[1]
38 will probe and set core.ignoreCase true if appropriate when the repository
41 Git relies on the proper configuration of this variable for your operating
42 and file system. Modifying this value may result in unexpected behavior.
44 core.precomposeUnicode::
45 This option is only used by Mac OS implementation of Git.
46 When core.precomposeUnicode=true, Git reverts the unicode decomposition
47 of filenames done by Mac OS. This is useful when sharing a repository
48 between Mac OS and Linux or Windows.
49 (Git for Windows 1.7.10 or higher is needed, or Git under cygwin 1.7).
50 When false, file names are handled fully transparent by Git,
51 which is backward compatible with older versions of Git.
54 If set to true, do not allow checkout of paths that would
55 be considered equivalent to `.git` on an HFS+ filesystem.
56 Defaults to `true` on Mac OS, and `false` elsewhere.
59 If set to true, do not allow checkout of paths that would
60 cause problems with the NTFS filesystem, e.g. conflict with
62 Defaults to `true` on Windows, and `false` elsewhere.
65 If set, the value of this variable is used as a command which
66 will identify all files that may have changed since the
67 requested date/time. This information is used to speed up git by
68 avoiding unnecessary processing of files that have not changed.
69 See the "fsmonitor-watchman" section of linkgit:githooks[5].
72 If false, the ctime differences between the index and the
73 working tree are ignored; useful when the inode change time
74 is regularly modified by something outside Git (file system
75 crawlers and some backup systems).
76 See linkgit:git-update-index[1]. True by default.
79 If true, the split-index feature of the index will be used.
80 See linkgit:git-update-index[1]. False by default.
83 Determines what to do about the untracked cache feature of the
84 index. It will be kept, if this variable is unset or set to
85 `keep`. It will automatically be added if set to `true`. And
86 it will automatically be removed, if set to `false`. Before
87 setting it to `true`, you should check that mtime is working
88 properly on your system.
89 See linkgit:git-update-index[1]. `keep` by default.
92 When missing or is set to `default`, many fields in the stat
93 structure are checked to detect if a file has been modified
94 since Git looked at it. When this configuration variable is
95 set to `minimal`, sub-second part of mtime and ctime, the
96 uid and gid of the owner of the file, the inode number (and
97 the device number, if Git was compiled to use it), are
98 excluded from the check among these fields, leaving only the
99 whole-second part of mtime (and ctime, if `core.trustCtime`
100 is set) and the filesize to be checked.
102 There are implementations of Git that do not leave usable values in
103 some fields (e.g. JGit); by excluding these fields from the
104 comparison, the `minimal` mode may help interoperability when the
105 same repository is used by these other systems at the same time.
108 Commands that output paths (e.g. 'ls-files', 'diff'), will
109 quote "unusual" characters in the pathname by enclosing the
110 pathname in double-quotes and escaping those characters with
111 backslashes in the same way C escapes control characters (e.g.
112 `\t` for TAB, `\n` for LF, `\\` for backslash) or bytes with
113 values larger than 0x80 (e.g. octal `\302\265` for "micro" in
114 UTF-8). If this variable is set to false, bytes higher than
115 0x80 are not considered "unusual" any more. Double-quotes,
116 backslash and control characters are always escaped regardless
117 of the setting of this variable. A simple space character is
118 not considered "unusual". Many commands can output pathnames
119 completely verbatim using the `-z` option. The default value
123 Sets the line ending type to use in the working directory for
124 files that are marked as text (either by having the `text`
125 attribute set, or by having `text=auto` and Git auto-detecting
126 the contents as text).
127 Alternatives are 'lf', 'crlf' and 'native', which uses the platform's
128 native line ending. The default value is `native`. See
129 linkgit:gitattributes[5] for more information on end-of-line
130 conversion. Note that this value is ignored if `core.autocrlf`
131 is set to `true` or `input`.
134 If true, makes Git check if converting `CRLF` is reversible when
135 end-of-line conversion is active. Git will verify if a command
136 modifies a file in the work tree either directly or indirectly.
137 For example, committing a file followed by checking out the
138 same file should yield the original file in the work tree. If
139 this is not the case for the current setting of
140 `core.autocrlf`, Git will reject the file. The variable can
141 be set to "warn", in which case Git will only warn about an
142 irreversible conversion but continue the operation.
144 CRLF conversion bears a slight chance of corrupting data.
145 When it is enabled, Git will convert CRLF to LF during commit and LF to
146 CRLF during checkout. A file that contains a mixture of LF and
147 CRLF before the commit cannot be recreated by Git. For text
148 files this is the right thing to do: it corrects line endings
149 such that we have only LF line endings in the repository.
150 But for binary files that are accidentally classified as text the
151 conversion can corrupt data.
153 If you recognize such corruption early you can easily fix it by
154 setting the conversion type explicitly in .gitattributes. Right
155 after committing you still have the original file in your work
156 tree and this file is not yet corrupted. You can explicitly tell
157 Git that this file is binary and Git will handle the file
160 Unfortunately, the desired effect of cleaning up text files with
161 mixed line endings and the undesired effect of corrupting binary
162 files cannot be distinguished. In both cases CRLFs are removed
163 in an irreversible way. For text files this is the right thing
164 to do because CRLFs are line endings, while for binary files
165 converting CRLFs corrupts data.
167 Note, this safety check does not mean that a checkout will generate a
168 file identical to the original file for a different setting of
169 `core.eol` and `core.autocrlf`, but only for the current one. For
170 example, a text file with `LF` would be accepted with `core.eol=lf`
171 and could later be checked out with `core.eol=crlf`, in which case the
172 resulting file would contain `CRLF`, although the original file
173 contained `LF`. However, in both work trees the line endings would be
174 consistent, that is either all `LF` or all `CRLF`, but never mixed. A
175 file with mixed line endings would be reported by the `core.safecrlf`
179 Setting this variable to "true" is the same as setting
180 the `text` attribute to "auto" on all files and core.eol to "crlf".
181 Set to true if you want to have `CRLF` line endings in your
182 working directory and the repository has LF line endings.
183 This variable can be set to 'input',
184 in which case no output conversion is performed.
186 core.checkRoundtripEncoding::
187 A comma and/or whitespace separated list of encodings that Git
188 performs UTF-8 round trip checks on if they are used in an
189 `working-tree-encoding` attribute (see linkgit:gitattributes[5]).
190 The default value is `SHIFT-JIS`.
193 If false, symbolic links are checked out as small plain files that
194 contain the link text. linkgit:git-update-index[1] and
195 linkgit:git-add[1] will not change the recorded type to regular
196 file. Useful on filesystems like FAT that do not support
199 The default is true, except linkgit:git-clone[1] or linkgit:git-init[1]
200 will probe and set core.symlinks false if appropriate when the repository
204 A "proxy command" to execute (as 'command host port') instead
205 of establishing direct connection to the remote server when
206 using the Git protocol for fetching. If the variable value is
207 in the "COMMAND for DOMAIN" format, the command is applied only
208 on hostnames ending with the specified domain string. This variable
209 may be set multiple times and is matched in the given order;
210 the first match wins.
212 Can be overridden by the `GIT_PROXY_COMMAND` environment variable
213 (which always applies universally, without the special "for"
216 The special string `none` can be used as the proxy command to
217 specify that no proxy be used for a given domain pattern.
218 This is useful for excluding servers inside a firewall from
219 proxy use, while defaulting to a common proxy for external domains.
222 If this variable is set, `git fetch` and `git push` will
223 use the specified command instead of `ssh` when they need to
224 connect to a remote system. The command is in the same form as
225 the `GIT_SSH_COMMAND` environment variable and is overridden
226 when the environment variable is set.
229 If true, Git will avoid using lstat() calls to detect if files have
230 changed by setting the "assume-unchanged" bit for those tracked files
231 which it has updated identically in both the index and working tree.
233 When files are modified outside of Git, the user will need to stage
234 the modified files explicitly (e.g. see 'Examples' section in
235 linkgit:git-update-index[1]).
236 Git will not normally detect changes to those files.
238 This is useful on systems where lstat() calls are very slow, such as
239 CIFS/Microsoft Windows.
243 core.preferSymlinkRefs::
244 Instead of the default "symref" format for HEAD
245 and other symbolic reference files, use symbolic links.
246 This is sometimes needed to work with old scripts that
247 expect HEAD to be a symbolic link.
249 core.alternateRefsCommand::
250 When advertising tips of available history from an alternate, use the shell to
251 execute the specified command instead of linkgit:git-for-each-ref[1]. The
252 first argument is the absolute path of the alternate. Output must contain one
253 hex object id per line (i.e., the same as produced by `git for-each-ref
254 --format='%(objectname)'`).
256 Note that you cannot generally put `git for-each-ref` directly into the config
257 value, as it does not take a repository path as an argument (but you can wrap
258 the command above in a shell script).
260 core.alternateRefsPrefixes::
261 When listing references from an alternate, list only references that begin
262 with the given prefix. Prefixes match as if they were given as arguments to
263 linkgit:git-for-each-ref[1]. To list multiple prefixes, separate them with
264 whitespace. If `core.alternateRefsCommand` is set, setting
265 `core.alternateRefsPrefixes` has no effect.
268 If true this repository is assumed to be 'bare' and has no
269 working directory associated with it. If this is the case a
270 number of commands that require a working directory will be
271 disabled, such as linkgit:git-add[1] or linkgit:git-merge[1].
273 This setting is automatically guessed by linkgit:git-clone[1] or
274 linkgit:git-init[1] when the repository was created. By default a
275 repository that ends in "/.git" is assumed to be not bare (bare =
276 false), while all other repositories are assumed to be bare (bare
280 Set the path to the root of the working tree.
281 If `GIT_COMMON_DIR` environment variable is set, core.worktree
282 is ignored and not used for determining the root of working tree.
283 This can be overridden by the `GIT_WORK_TREE` environment
284 variable and the `--work-tree` command-line option.
285 The value can be an absolute path or relative to the path to
286 the .git directory, which is either specified by --git-dir
287 or GIT_DIR, or automatically discovered.
288 If --git-dir or GIT_DIR is specified but none of
289 --work-tree, GIT_WORK_TREE and core.worktree is specified,
290 the current working directory is regarded as the top level
291 of your working tree.
293 Note that this variable is honored even when set in a configuration
294 file in a ".git" subdirectory of a directory and its value differs
295 from the latter directory (e.g. "/path/to/.git/config" has
296 core.worktree set to "/different/path"), which is most likely a
297 misconfiguration. Running Git commands in the "/path/to" directory will
298 still use "/different/path" as the root of the work tree and can cause
299 confusion unless you know what you are doing (e.g. you are creating a
300 read-only snapshot of the same index to a location different from the
301 repository's usual working tree).
303 core.logAllRefUpdates::
304 Enable the reflog. Updates to a ref <ref> is logged to the file
305 "`$GIT_DIR/logs/<ref>`", by appending the new and old
306 SHA-1, the date/time and the reason of the update, but
307 only when the file exists. If this configuration
308 variable is set to `true`, missing "`$GIT_DIR/logs/<ref>`"
309 file is automatically created for branch heads (i.e. under
310 `refs/heads/`), remote refs (i.e. under `refs/remotes/`),
311 note refs (i.e. under `refs/notes/`), and the symbolic ref `HEAD`.
312 If it is set to `always`, then a missing reflog is automatically
313 created for any ref under `refs/`.
315 This information can be used to determine what commit
316 was the tip of a branch "2 days ago".
318 This value is true by default in a repository that has
319 a working directory associated with it, and false by
320 default in a bare repository.
322 core.repositoryFormatVersion::
323 Internal variable identifying the repository format and layout
326 core.sharedRepository::
327 When 'group' (or 'true'), the repository is made shareable between
328 several users in a group (making sure all the files and objects are
329 group-writable). When 'all' (or 'world' or 'everybody'), the
330 repository will be readable by all users, additionally to being
331 group-shareable. When 'umask' (or 'false'), Git will use permissions
332 reported by umask(2). When '0xxx', where '0xxx' is an octal number,
333 files in the repository will have this mode value. '0xxx' will override
334 user's umask value (whereas the other options will only override
335 requested parts of the user's umask value). Examples: '0660' will make
336 the repo read/write-able for the owner and group, but inaccessible to
337 others (equivalent to 'group' unless umask is e.g. '0022'). '0640' is a
338 repository that is group-readable but not group-writable.
339 See linkgit:git-init[1]. False by default.
341 core.warnAmbiguousRefs::
342 If true, Git will warn you if the ref name you passed it is ambiguous
343 and might match multiple refs in the repository. True by default.
346 An integer -1..9, indicating a default compression level.
347 -1 is the zlib default. 0 means no compression,
348 and 1..9 are various speed/size tradeoffs, 9 being slowest.
349 If set, this provides a default to other compression variables,
350 such as `core.looseCompression` and `pack.compression`.
352 core.looseCompression::
353 An integer -1..9, indicating the compression level for objects that
354 are not in a pack file. -1 is the zlib default. 0 means no
355 compression, and 1..9 are various speed/size tradeoffs, 9 being
356 slowest. If not set, defaults to core.compression. If that is
357 not set, defaults to 1 (best speed).
359 core.packedGitWindowSize::
360 Number of bytes of a pack file to map into memory in a
361 single mapping operation. Larger window sizes may allow
362 your system to process a smaller number of large pack files
363 more quickly. Smaller window sizes will negatively affect
364 performance due to increased calls to the operating system's
365 memory manager, but may improve performance when accessing
366 a large number of large pack files.
368 Default is 1 MiB if NO_MMAP was set at compile time, otherwise 32
369 MiB on 32 bit platforms and 1 GiB on 64 bit platforms. This should
370 be reasonable for all users/operating systems. You probably do
371 not need to adjust this value.
373 Common unit suffixes of 'k', 'm', or 'g' are supported.
375 core.packedGitLimit::
376 Maximum number of bytes to map simultaneously into memory
377 from pack files. If Git needs to access more than this many
378 bytes at once to complete an operation it will unmap existing
379 regions to reclaim virtual address space within the process.
381 Default is 256 MiB on 32 bit platforms and 32 TiB (effectively
382 unlimited) on 64 bit platforms.
383 This should be reasonable for all users/operating systems, except on
384 the largest projects. You probably do not need to adjust this value.
386 Common unit suffixes of 'k', 'm', or 'g' are supported.
388 core.deltaBaseCacheLimit::
389 Maximum number of bytes to reserve for caching base objects
390 that may be referenced by multiple deltified objects. By storing the
391 entire decompressed base objects in a cache Git is able
392 to avoid unpacking and decompressing frequently used base
393 objects multiple times.
395 Default is 96 MiB on all platforms. This should be reasonable
396 for all users/operating systems, except on the largest projects.
397 You probably do not need to adjust this value.
399 Common unit suffixes of 'k', 'm', or 'g' are supported.
401 core.bigFileThreshold::
402 Files larger than this size are stored deflated, without
403 attempting delta compression. Storing large files without
404 delta compression avoids excessive memory usage, at the
405 slight expense of increased disk usage. Additionally files
406 larger than this size are always treated as binary.
408 Default is 512 MiB on all platforms. This should be reasonable
409 for most projects as source code and other text files can still
410 be delta compressed, but larger binary media files won't be.
412 Common unit suffixes of 'k', 'm', or 'g' are supported.
415 Specifies the pathname to the file that contains patterns to
416 describe paths that are not meant to be tracked, in addition
417 to `.gitignore` (per-directory) and `.git/info/exclude`.
418 Defaults to `$XDG_CONFIG_HOME/git/ignore`.
419 If `$XDG_CONFIG_HOME` is either not set or empty, `$HOME/.config/git/ignore`
420 is used instead. See linkgit:gitignore[5].
423 Some commands (e.g. svn and http interfaces) that interactively
424 ask for a password can be told to use an external program given
425 via the value of this variable. Can be overridden by the `GIT_ASKPASS`
426 environment variable. If not set, fall back to the value of the
427 `SSH_ASKPASS` environment variable or, failing that, a simple password
428 prompt. The external program shall be given a suitable prompt as
429 command-line argument and write the password on its STDOUT.
431 core.attributesFile::
432 In addition to `.gitattributes` (per-directory) and
433 `.git/info/attributes`, Git looks into this file for attributes
434 (see linkgit:gitattributes[5]). Path expansions are made the same
435 way as for `core.excludesFile`. Its default value is
436 `$XDG_CONFIG_HOME/git/attributes`. If `$XDG_CONFIG_HOME` is either not
437 set or empty, `$HOME/.config/git/attributes` is used instead.
440 By default Git will look for your hooks in the
441 `$GIT_DIR/hooks` directory. Set this to different path,
442 e.g. `/etc/git/hooks`, and Git will try to find your hooks in
443 that directory, e.g. `/etc/git/hooks/pre-receive` instead of
444 in `$GIT_DIR/hooks/pre-receive`.
446 The path can be either absolute or relative. A relative path is
447 taken as relative to the directory where the hooks are run (see
448 the "DESCRIPTION" section of linkgit:githooks[5]).
450 This configuration variable is useful in cases where you'd like to
451 centrally configure your Git hooks instead of configuring them on a
452 per-repository basis, or as a more flexible and centralized
453 alternative to having an `init.templateDir` where you've changed
457 Commands such as `commit` and `tag` that let you edit
458 messages by launching an editor use the value of this
459 variable when it is set, and the environment variable
460 `GIT_EDITOR` is not set. See linkgit:git-var[1].
463 Commands such as `commit` and `tag` that let you edit
464 messages consider a line that begins with this character
465 commented, and removes them after the editor returns
468 If set to "auto", `git-commit` would select a character that is not
469 the beginning character of any line in existing commit messages.
471 core.filesRefLockTimeout::
472 The length of time, in milliseconds, to retry when trying to
473 lock an individual reference. Value 0 means not to retry at
474 all; -1 means to try indefinitely. Default is 100 (i.e.,
477 core.packedRefsTimeout::
478 The length of time, in milliseconds, to retry when trying to
479 lock the `packed-refs` file. Value 0 means not to retry at
480 all; -1 means to try indefinitely. Default is 1000 (i.e.,
484 Text viewer for use by Git commands (e.g., 'less'). The value
485 is meant to be interpreted by the shell. The order of preference
486 is the `$GIT_PAGER` environment variable, then `core.pager`
487 configuration, then `$PAGER`, and then the default chosen at
488 compile time (usually 'less').
490 When the `LESS` environment variable is unset, Git sets it to `FRX`
491 (if `LESS` environment variable is set, Git does not change it at
492 all). If you want to selectively override Git's default setting
493 for `LESS`, you can set `core.pager` to e.g. `less -S`. This will
494 be passed to the shell by Git, which will translate the final
495 command to `LESS=FRX less -S`. The environment does not set the
496 `S` option but the command line does, instructing less to truncate
497 long lines. Similarly, setting `core.pager` to `less -+F` will
498 deactivate the `F` option specified by the environment from the
499 command-line, deactivating the "quit if one screen" behavior of
500 `less`. One can specifically activate some flags for particular
501 commands: for example, setting `pager.blame` to `less -S` enables
502 line truncation only for `git blame`.
504 Likewise, when the `LV` environment variable is unset, Git sets it
505 to `-c`. You can override this setting by exporting `LV` with
506 another value or setting `core.pager` to `lv +c`.
509 A comma separated list of common whitespace problems to
510 notice. 'git diff' will use `color.diff.whitespace` to
511 highlight them, and 'git apply --whitespace=error' will
512 consider them as errors. You can prefix `-` to disable
513 any of them (e.g. `-trailing-space`):
515 * `blank-at-eol` treats trailing whitespaces at the end of the line
516 as an error (enabled by default).
517 * `space-before-tab` treats a space character that appears immediately
518 before a tab character in the initial indent part of the line as an
519 error (enabled by default).
520 * `indent-with-non-tab` treats a line that is indented with space
521 characters instead of the equivalent tabs as an error (not enabled by
523 * `tab-in-indent` treats a tab character in the initial indent part of
524 the line as an error (not enabled by default).
525 * `blank-at-eof` treats blank lines added at the end of file as an error
526 (enabled by default).
527 * `trailing-space` is a short-hand to cover both `blank-at-eol` and
529 * `cr-at-eol` treats a carriage-return at the end of line as
530 part of the line terminator, i.e. with it, `trailing-space`
531 does not trigger if the character before such a carriage-return
532 is not a whitespace (not enabled by default).
533 * `tabwidth=<n>` tells how many character positions a tab occupies; this
534 is relevant for `indent-with-non-tab` and when Git fixes `tab-in-indent`
535 errors. The default tab width is 8. Allowed values are 1 to 63.
537 core.fsyncObjectFiles::
538 This boolean will enable 'fsync()' when writing object files.
540 This is a total waste of time and effort on a filesystem that orders
541 data writes properly, but can be useful for filesystems that do not use
542 journalling (traditional UNIX filesystems) or that only journal metadata
543 and not file contents (OS X's HFS+, or Linux ext3 with "data=writeback").
546 Enable parallel index preload for operations like 'git diff'
548 This can speed up operations like 'git diff' and 'git status' especially
549 on filesystems like NFS that have weak caching semantics and thus
550 relatively high IO latencies. When enabled, Git will do the
551 index comparison to the filesystem data in parallel, allowing
552 overlapping IO's. Defaults to true.
555 Windows-only: comma-separated list of environment variables'
556 names that need to be unset before spawning any other process.
557 Defaults to `PERL5LIB` to account for the fact that Git for
558 Windows insists on using its own Perl interpreter.
561 You can set this to 'link', in which case a hardlink followed by
562 a delete of the source are used to make sure that object creation
563 will not overwrite existing objects.
565 On some file system/operating system combinations, this is unreliable.
566 Set this config setting to 'rename' there; However, This will remove the
567 check that makes sure that existing object files will not get overwritten.
570 When showing commit messages, also show notes which are stored in
571 the given ref. The ref must be fully qualified. If the given
572 ref does not exist, it is not an error but means that no
573 notes should be printed.
575 This setting defaults to "refs/notes/commits", and it can be overridden by
576 the `GIT_NOTES_REF` environment variable. See linkgit:git-notes[1].
579 If true, then git will read the commit-graph file (if it exists)
580 to parse the graph structure of commits. Defaults to false. See
581 linkgit:git-commit-graph[1] for more information.
583 core.useReplaceRefs::
584 If set to `false`, behave as if the `--no-replace-objects`
585 option was given on the command line. See linkgit:git[1] and
586 linkgit:git-replace[1] for more information.
588 core.multiPackIndex::
589 Use the multi-pack-index file to track multiple packfiles using a
590 single index. See link:technical/multi-pack-index.html[the
591 multi-pack-index design document].
593 core.sparseCheckout::
594 Enable "sparse checkout" feature. See section "Sparse checkout" in
595 linkgit:git-read-tree[1] for more information.
598 Set the length object names are abbreviated to. If
599 unspecified or set to "auto", an appropriate value is
600 computed based on the approximate number of packed objects
601 in your repository, which hopefully is enough for
602 abbreviated object names to stay unique for some time.
603 The minimum length is 4.