]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/config/core.txt
config: allow multi-byte core.commentChar
[thirdparty/git.git] / Documentation / config / core.txt
CommitLineData
1a394fa9
NTND
1core.fileMode::
2 Tells Git if the executable bit of files in the working tree
3 is to be honored.
4+
5Some filesystems lose the executable bit when a file that is
6marked as executable is checked out, or checks out a
7non-executable file with executable bit on.
8linkgit:git-clone[1] or linkgit:git-init[1] probe the filesystem
9to see if it handles the executable bit correctly
10and this variable is automatically set as necessary.
11+
12A repository, however, may be on a filesystem that handles
13the filemode correctly, and this variable is set to 'true'
14when created, but later may be made accessible from another
15environment that loses the filemode (e.g. exporting ext4 via
16CIFS mount, visiting a Cygwin created repository with
17Git for Windows or Eclipse).
18In such a case it may be necessary to set this variable to 'false'.
19See linkgit:git-update-index[1].
20+
21The default is true (when core.filemode is not specified in the config file).
22
23core.hideDotFiles::
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'.
28
29core.ignoreCase::
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
35 "Makefile".
36+
37The default is false, except linkgit:git-clone[1] or linkgit:git-init[1]
38will probe and set core.ignoreCase true if appropriate when the repository
39is created.
40+
41Git relies on the proper configuration of this variable for your operating
42and file system. Modifying this value may result in unexpected behavior.
43
44core.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.
52
53core.protectHFS::
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.
57
58core.protectNTFS::
59 If set to true, do not allow checkout of paths that would
60 cause problems with the NTFS filesystem, e.g. conflict with
61 8.3 "short" names.
62 Defaults to `true` on Windows, and `false` elsewhere.
63
64core.fsmonitor::
32484869 65 If set to true, enable the built-in file system monitor
f3ea4bed 66 daemon for this working directory (linkgit:git-fsmonitor{litdd}daemon[1]).
32484869
JH
67+
68Like hook-based file system monitors, the built-in file system monitor
69can speed up Git commands that need to refresh the Git index
70(e.g. `git status`) in a working directory with many files. The
71built-in monitor eliminates the need to install and maintain an
72external third-party tool.
73+
74The built-in file system monitor is currently available only on a
75limited set of supported platforms. Currently, this includes Windows
76and MacOS.
77+
78 Otherwise, this variable contains the pathname of the "fsmonitor"
79 hook command.
80+
81This hook command is used to identify all files that may have changed
82since the requested date/time. This information is used to speed up
83git by avoiding unnecessary scanning of files that have not changed.
84+
85See the "fsmonitor-watchman" section of linkgit:githooks[5].
86+
87Note that if you concurrently use multiple versions of Git, such
88as one version on the command line and another version in an IDE
89tool, that the definition of `core.fsmonitor` was extended to
90allow boolean values in addition to hook pathnames. Git versions
912.35.1 and prior will not understand the boolean values and will
92consider the "true" or "false" values as hook pathnames to be
93invoked. Git versions 2.26 thru 2.35.1 default to hook protocol
94V2 and will fall back to no fsmonitor (full scan). Git versions
95prior to 2.26 default to hook protocol V1 and will silently
96assume there were no changes to report (no scan), so status
97commands may report incomplete results. For this reason, it is
98best to upgrade all of your Git versions before using the built-in
99file system monitor.
1a394fa9 100
dfaed028 101core.fsmonitorHookVersion::
32484869
JH
102 Sets the protocol version to be used when invoking the
103 "fsmonitor" hook.
104+
105There are currently versions 1 and 2. When this is not set,
106version 2 will be tried first and if it fails then version 1
107will be tried. Version 1 uses a timestamp as input to determine
108which files have changes since that time but some monitors
109like Watchman have race conditions when used with a timestamp.
110Version 2 uses an opaque string so that the monitor can return
111something that can be used to determine what files have changed
112without race conditions.
dfaed028 113
1a394fa9
NTND
114core.trustctime::
115 If false, the ctime differences between the index and the
116 working tree are ignored; useful when the inode change time
117 is regularly modified by something outside Git (file system
118 crawlers and some backup systems).
119 See linkgit:git-update-index[1]. True by default.
120
121core.splitIndex::
122 If true, the split-index feature of the index will be used.
123 See linkgit:git-update-index[1]. False by default.
124
125core.untrackedCache::
126 Determines what to do about the untracked cache feature of the
127 index. It will be kept, if this variable is unset or set to
128 `keep`. It will automatically be added if set to `true`. And
129 it will automatically be removed, if set to `false`. Before
130 setting it to `true`, you should check that mtime is working
131 properly on your system.
c6cc4c5a
DS
132 See linkgit:git-update-index[1]. `keep` by default, unless
133 `feature.manyFiles` is enabled which sets this setting to
134 `true` by default.
1a394fa9
NTND
135
136core.checkStat::
137 When missing or is set to `default`, many fields in the stat
138 structure are checked to detect if a file has been modified
139 since Git looked at it. When this configuration variable is
140 set to `minimal`, sub-second part of mtime and ctime, the
141 uid and gid of the owner of the file, the inode number (and
142 the device number, if Git was compiled to use it), are
143 excluded from the check among these fields, leaving only the
144 whole-second part of mtime (and ctime, if `core.trustCtime`
145 is set) and the filesize to be checked.
146+
147There are implementations of Git that do not leave usable values in
148some fields (e.g. JGit); by excluding these fields from the
149comparison, the `minimal` mode may help interoperability when the
150same repository is used by these other systems at the same time.
151
152core.quotePath::
153 Commands that output paths (e.g. 'ls-files', 'diff'), will
154 quote "unusual" characters in the pathname by enclosing the
155 pathname in double-quotes and escaping those characters with
156 backslashes in the same way C escapes control characters (e.g.
157 `\t` for TAB, `\n` for LF, `\\` for backslash) or bytes with
158 values larger than 0x80 (e.g. octal `\302\265` for "micro" in
159 UTF-8). If this variable is set to false, bytes higher than
160 0x80 are not considered "unusual" any more. Double-quotes,
161 backslash and control characters are always escaped regardless
162 of the setting of this variable. A simple space character is
163 not considered "unusual". Many commands can output pathnames
164 completely verbatim using the `-z` option. The default value
165 is true.
166
167core.eol::
168 Sets the line ending type to use in the working directory for
c9446f05
JK
169 files that are marked as text (either by having the `text`
170 attribute set, or by having `text=auto` and Git auto-detecting
171 the contents as text).
1a394fa9
NTND
172 Alternatives are 'lf', 'crlf' and 'native', which uses the platform's
173 native line ending. The default value is `native`. See
174 linkgit:gitattributes[5] for more information on end-of-line
c9446f05
JK
175 conversion. Note that this value is ignored if `core.autocrlf`
176 is set to `true` or `input`.
1a394fa9
NTND
177
178core.safecrlf::
179 If true, makes Git check if converting `CRLF` is reversible when
180 end-of-line conversion is active. Git will verify if a command
181 modifies a file in the work tree either directly or indirectly.
182 For example, committing a file followed by checking out the
183 same file should yield the original file in the work tree. If
184 this is not the case for the current setting of
185 `core.autocrlf`, Git will reject the file. The variable can
186 be set to "warn", in which case Git will only warn about an
187 irreversible conversion but continue the operation.
188+
189CRLF conversion bears a slight chance of corrupting data.
190When it is enabled, Git will convert CRLF to LF during commit and LF to
191CRLF during checkout. A file that contains a mixture of LF and
192CRLF before the commit cannot be recreated by Git. For text
193files this is the right thing to do: it corrects line endings
194such that we have only LF line endings in the repository.
195But for binary files that are accidentally classified as text the
196conversion can corrupt data.
197+
198If you recognize such corruption early you can easily fix it by
199setting the conversion type explicitly in .gitattributes. Right
200after committing you still have the original file in your work
201tree and this file is not yet corrupted. You can explicitly tell
202Git that this file is binary and Git will handle the file
203appropriately.
204+
205Unfortunately, the desired effect of cleaning up text files with
206mixed line endings and the undesired effect of corrupting binary
207files cannot be distinguished. In both cases CRLFs are removed
208in an irreversible way. For text files this is the right thing
209to do because CRLFs are line endings, while for binary files
210converting CRLFs corrupts data.
211+
212Note, this safety check does not mean that a checkout will generate a
213file identical to the original file for a different setting of
214`core.eol` and `core.autocrlf`, but only for the current one. For
215example, a text file with `LF` would be accepted with `core.eol=lf`
216and could later be checked out with `core.eol=crlf`, in which case the
217resulting file would contain `CRLF`, although the original file
218contained `LF`. However, in both work trees the line endings would be
219consistent, that is either all `LF` or all `CRLF`, but never mixed. A
220file with mixed line endings would be reported by the `core.safecrlf`
221mechanism.
222
223core.autocrlf::
224 Setting this variable to "true" is the same as setting
225 the `text` attribute to "auto" on all files and core.eol to "crlf".
226 Set to true if you want to have `CRLF` line endings in your
227 working directory and the repository has LF line endings.
228 This variable can be set to 'input',
229 in which case no output conversion is performed.
230
231core.checkRoundtripEncoding::
232 A comma and/or whitespace separated list of encodings that Git
233 performs UTF-8 round trip checks on if they are used in an
234 `working-tree-encoding` attribute (see linkgit:gitattributes[5]).
235 The default value is `SHIFT-JIS`.
236
237core.symlinks::
238 If false, symbolic links are checked out as small plain files that
239 contain the link text. linkgit:git-update-index[1] and
240 linkgit:git-add[1] will not change the recorded type to regular
241 file. Useful on filesystems like FAT that do not support
242 symbolic links.
243+
244The default is true, except linkgit:git-clone[1] or linkgit:git-init[1]
245will probe and set core.symlinks false if appropriate when the repository
246is created.
247
248core.gitProxy::
249 A "proxy command" to execute (as 'command host port') instead
250 of establishing direct connection to the remote server when
251 using the Git protocol for fetching. If the variable value is
252 in the "COMMAND for DOMAIN" format, the command is applied only
253 on hostnames ending with the specified domain string. This variable
254 may be set multiple times and is matched in the given order;
255 the first match wins.
256+
257Can be overridden by the `GIT_PROXY_COMMAND` environment variable
258(which always applies universally, without the special "for"
259handling).
260+
261The special string `none` can be used as the proxy command to
262specify that no proxy be used for a given domain pattern.
263This is useful for excluding servers inside a firewall from
264proxy use, while defaulting to a common proxy for external domains.
265
266core.sshCommand::
267 If this variable is set, `git fetch` and `git push` will
268 use the specified command instead of `ssh` when they need to
269 connect to a remote system. The command is in the same form as
270 the `GIT_SSH_COMMAND` environment variable and is overridden
271 when the environment variable is set.
272
273core.ignoreStat::
274 If true, Git will avoid using lstat() calls to detect if files have
275 changed by setting the "assume-unchanged" bit for those tracked files
276 which it has updated identically in both the index and working tree.
277+
278When files are modified outside of Git, the user will need to stage
279the modified files explicitly (e.g. see 'Examples' section in
280linkgit:git-update-index[1]).
281Git will not normally detect changes to those files.
282+
283This is useful on systems where lstat() calls are very slow, such as
284CIFS/Microsoft Windows.
285+
286False by default.
287
288core.preferSymlinkRefs::
289 Instead of the default "symref" format for HEAD
290 and other symbolic reference files, use symbolic links.
291 This is sometimes needed to work with old scripts that
292 expect HEAD to be a symbolic link.
293
294core.alternateRefsCommand::
295 When advertising tips of available history from an alternate, use the shell to
296 execute the specified command instead of linkgit:git-for-each-ref[1]. The
297 first argument is the absolute path of the alternate. Output must contain one
fd7761a1 298 hex object id per line (i.e., the same as produced by `git for-each-ref
1a394fa9
NTND
299 --format='%(objectname)'`).
300+
301Note that you cannot generally put `git for-each-ref` directly into the config
302value, as it does not take a repository path as an argument (but you can wrap
303the command above in a shell script).
304
305core.alternateRefsPrefixes::
306 When listing references from an alternate, list only references that begin
307 with the given prefix. Prefixes match as if they were given as arguments to
308 linkgit:git-for-each-ref[1]. To list multiple prefixes, separate them with
309 whitespace. If `core.alternateRefsCommand` is set, setting
310 `core.alternateRefsPrefixes` has no effect.
311
312core.bare::
313 If true this repository is assumed to be 'bare' and has no
314 working directory associated with it. If this is the case a
315 number of commands that require a working directory will be
316 disabled, such as linkgit:git-add[1] or linkgit:git-merge[1].
317+
318This setting is automatically guessed by linkgit:git-clone[1] or
319linkgit:git-init[1] when the repository was created. By default a
320repository that ends in "/.git" is assumed to be not bare (bare =
321false), while all other repositories are assumed to be bare (bare
322= true).
323
324core.worktree::
325 Set the path to the root of the working tree.
326 If `GIT_COMMON_DIR` environment variable is set, core.worktree
327 is ignored and not used for determining the root of working tree.
328 This can be overridden by the `GIT_WORK_TREE` environment
329 variable and the `--work-tree` command-line option.
330 The value can be an absolute path or relative to the path to
331 the .git directory, which is either specified by --git-dir
332 or GIT_DIR, or automatically discovered.
333 If --git-dir or GIT_DIR is specified but none of
334 --work-tree, GIT_WORK_TREE and core.worktree is specified,
335 the current working directory is regarded as the top level
336 of your working tree.
337+
338Note that this variable is honored even when set in a configuration
339file in a ".git" subdirectory of a directory and its value differs
340from the latter directory (e.g. "/path/to/.git/config" has
341core.worktree set to "/different/path"), which is most likely a
342misconfiguration. Running Git commands in the "/path/to" directory will
343still use "/different/path" as the root of the work tree and can cause
344confusion unless you know what you are doing (e.g. you are creating a
345read-only snapshot of the same index to a location different from the
346repository's usual working tree).
347
348core.logAllRefUpdates::
349 Enable the reflog. Updates to a ref <ref> is logged to the file
350 "`$GIT_DIR/logs/<ref>`", by appending the new and old
351 SHA-1, the date/time and the reason of the update, but
352 only when the file exists. If this configuration
353 variable is set to `true`, missing "`$GIT_DIR/logs/<ref>`"
354 file is automatically created for branch heads (i.e. under
355 `refs/heads/`), remote refs (i.e. under `refs/remotes/`),
356 note refs (i.e. under `refs/notes/`), and the symbolic ref `HEAD`.
357 If it is set to `always`, then a missing reflog is automatically
358 created for any ref under `refs/`.
359+
360This information can be used to determine what commit
361was the tip of a branch "2 days ago".
362+
363This value is true by default in a repository that has
364a working directory associated with it, and false by
365default in a bare repository.
366
367core.repositoryFormatVersion::
368 Internal variable identifying the repository format and layout
369 version.
370
371core.sharedRepository::
372 When 'group' (or 'true'), the repository is made shareable between
373 several users in a group (making sure all the files and objects are
374 group-writable). When 'all' (or 'world' or 'everybody'), the
375 repository will be readable by all users, additionally to being
376 group-shareable. When 'umask' (or 'false'), Git will use permissions
377 reported by umask(2). When '0xxx', where '0xxx' is an octal number,
378 files in the repository will have this mode value. '0xxx' will override
379 user's umask value (whereas the other options will only override
380 requested parts of the user's umask value). Examples: '0660' will make
381 the repo read/write-able for the owner and group, but inaccessible to
382 others (equivalent to 'group' unless umask is e.g. '0022'). '0640' is a
383 repository that is group-readable but not group-writable.
384 See linkgit:git-init[1]. False by default.
385
386core.warnAmbiguousRefs::
387 If true, Git will warn you if the ref name you passed it is ambiguous
388 and might match multiple refs in the repository. True by default.
389
390core.compression::
391 An integer -1..9, indicating a default compression level.
392 -1 is the zlib default. 0 means no compression,
393 and 1..9 are various speed/size tradeoffs, 9 being slowest.
394 If set, this provides a default to other compression variables,
395 such as `core.looseCompression` and `pack.compression`.
396
397core.looseCompression::
398 An integer -1..9, indicating the compression level for objects that
399 are not in a pack file. -1 is the zlib default. 0 means no
400 compression, and 1..9 are various speed/size tradeoffs, 9 being
401 slowest. If not set, defaults to core.compression. If that is
402 not set, defaults to 1 (best speed).
403
404core.packedGitWindowSize::
405 Number of bytes of a pack file to map into memory in a
406 single mapping operation. Larger window sizes may allow
407 your system to process a smaller number of large pack files
408 more quickly. Smaller window sizes will negatively affect
409 performance due to increased calls to the operating system's
410 memory manager, but may improve performance when accessing
411 a large number of large pack files.
412+
413Default is 1 MiB if NO_MMAP was set at compile time, otherwise 32
414MiB on 32 bit platforms and 1 GiB on 64 bit platforms. This should
415be reasonable for all users/operating systems. You probably do
416not need to adjust this value.
417+
418Common unit suffixes of 'k', 'm', or 'g' are supported.
419
420core.packedGitLimit::
421 Maximum number of bytes to map simultaneously into memory
422 from pack files. If Git needs to access more than this many
423 bytes at once to complete an operation it will unmap existing
424 regions to reclaim virtual address space within the process.
425+
426Default is 256 MiB on 32 bit platforms and 32 TiB (effectively
427unlimited) on 64 bit platforms.
428This should be reasonable for all users/operating systems, except on
429the largest projects. You probably do not need to adjust this value.
430+
431Common unit suffixes of 'k', 'm', or 'g' are supported.
432
433core.deltaBaseCacheLimit::
009be0d2 434 Maximum number of bytes per thread to reserve for caching base objects
1a394fa9
NTND
435 that may be referenced by multiple deltified objects. By storing the
436 entire decompressed base objects in a cache Git is able
437 to avoid unpacking and decompressing frequently used base
438 objects multiple times.
439+
440Default is 96 MiB on all platforms. This should be reasonable
441for all users/operating systems, except on the largest projects.
442You probably do not need to adjust this value.
443+
444Common unit suffixes of 'k', 'm', or 'g' are supported.
445
446core.bigFileThreshold::
3c3ca0b0
ÆAB
447 The size of files considered "big", which as discussed below
448 changes the behavior of numerous git commands, as well as how
449 such files are stored within the repository. The default is
450 512 MiB. Common unit suffixes of 'k', 'm', or 'g' are
451 supported.
1a394fa9 452+
3c3ca0b0 453Files above the configured limit will be:
1a394fa9 454+
3c3ca0b0
ÆAB
455* Stored deflated in packfiles, without attempting delta compression.
456+
457The default limit is primarily set with this use-case in mind. With it,
458most projects will have their source code and other text files delta
459compressed, but not larger binary media files.
460+
461Storing large files without delta compression avoids excessive memory
462usage, at the slight expense of increased disk usage.
463+
464* Will be treated as if they were labeled "binary" (see
465 linkgit:gitattributes[5]). e.g. linkgit:git-log[1] and
466 linkgit:git-diff[1] will not compute diffs for files above this limit.
467+
468* Will generally be streamed when written, which avoids excessive
469memory usage, at the cost of some fixed overhead. Commands that make
470use of this include linkgit:git-archive[1],
aaf81223
HX
471linkgit:git-fast-import[1], linkgit:git-index-pack[1],
472linkgit:git-unpack-objects[1] and linkgit:git-fsck[1].
1a394fa9
NTND
473
474core.excludesFile::
475 Specifies the pathname to the file that contains patterns to
476 describe paths that are not meant to be tracked, in addition
68ed71b5 477 to `.gitignore` (per-directory) and `.git/info/exclude`.
1a394fa9
NTND
478 Defaults to `$XDG_CONFIG_HOME/git/ignore`.
479 If `$XDG_CONFIG_HOME` is either not set or empty, `$HOME/.config/git/ignore`
480 is used instead. See linkgit:gitignore[5].
481
482core.askPass::
483 Some commands (e.g. svn and http interfaces) that interactively
484 ask for a password can be told to use an external program given
485 via the value of this variable. Can be overridden by the `GIT_ASKPASS`
486 environment variable. If not set, fall back to the value of the
487 `SSH_ASKPASS` environment variable or, failing that, a simple password
488 prompt. The external program shall be given a suitable prompt as
489 command-line argument and write the password on its STDOUT.
490
491core.attributesFile::
68ed71b5
CB
492 In addition to `.gitattributes` (per-directory) and
493 `.git/info/attributes`, Git looks into this file for attributes
1a394fa9
NTND
494 (see linkgit:gitattributes[5]). Path expansions are made the same
495 way as for `core.excludesFile`. Its default value is
496 `$XDG_CONFIG_HOME/git/attributes`. If `$XDG_CONFIG_HOME` is either not
497 set or empty, `$HOME/.config/git/attributes` is used instead.
498
499core.hooksPath::
500 By default Git will look for your hooks in the
68ed71b5
CB
501 `$GIT_DIR/hooks` directory. Set this to different path,
502 e.g. `/etc/git/hooks`, and Git will try to find your hooks in
503 that directory, e.g. `/etc/git/hooks/pre-receive` instead of
504 in `$GIT_DIR/hooks/pre-receive`.
1a394fa9
NTND
505+
506The path can be either absolute or relative. A relative path is
507taken as relative to the directory where the hooks are run (see
508the "DESCRIPTION" section of linkgit:githooks[5]).
509+
510This configuration variable is useful in cases where you'd like to
511centrally configure your Git hooks instead of configuring them on a
512per-repository basis, or as a more flexible and centralized
513alternative to having an `init.templateDir` where you've changed
514default hooks.
515
516core.editor::
517 Commands such as `commit` and `tag` that let you edit
518 messages by launching an editor use the value of this
519 variable when it is set, and the environment variable
520 `GIT_EDITOR` is not set. See linkgit:git-var[1].
521
522core.commentChar::
523 Commands such as `commit` and `tag` that let you edit
524 messages consider a line that begins with this character
525 commented, and removes them after the editor returns
8b311478
JK
526 (default '#'). Note that this option can take values larger than
527 a byte (whether a single multi-byte character, or you
528 could even go wild with a multi-character sequence).
1a394fa9
NTND
529+
530If set to "auto", `git-commit` would select a character that is not
531the beginning character of any line in existing commit messages.
532
533core.filesRefLockTimeout::
534 The length of time, in milliseconds, to retry when trying to
535 lock an individual reference. Value 0 means not to retry at
536 all; -1 means to try indefinitely. Default is 100 (i.e.,
537 retry for 100ms).
538
539core.packedRefsTimeout::
540 The length of time, in milliseconds, to retry when trying to
541 lock the `packed-refs` file. Value 0 means not to retry at
542 all; -1 means to try indefinitely. Default is 1000 (i.e.,
543 retry for 1 second).
544
545core.pager::
546 Text viewer for use by Git commands (e.g., 'less'). The value
547 is meant to be interpreted by the shell. The order of preference
548 is the `$GIT_PAGER` environment variable, then `core.pager`
549 configuration, then `$PAGER`, and then the default chosen at
550 compile time (usually 'less').
551+
552When the `LESS` environment variable is unset, Git sets it to `FRX`
553(if `LESS` environment variable is set, Git does not change it at
554all). If you want to selectively override Git's default setting
555for `LESS`, you can set `core.pager` to e.g. `less -S`. This will
556be passed to the shell by Git, which will translate the final
557command to `LESS=FRX less -S`. The environment does not set the
558`S` option but the command line does, instructing less to truncate
559long lines. Similarly, setting `core.pager` to `less -+F` will
560deactivate the `F` option specified by the environment from the
561command-line, deactivating the "quit if one screen" behavior of
562`less`. One can specifically activate some flags for particular
563commands: for example, setting `pager.blame` to `less -S` enables
564line truncation only for `git blame`.
565+
566Likewise, when the `LV` environment variable is unset, Git sets it
567to `-c`. You can override this setting by exporting `LV` with
568another value or setting `core.pager` to `lv +c`.
569
570core.whitespace::
571 A comma separated list of common whitespace problems to
572 notice. 'git diff' will use `color.diff.whitespace` to
573 highlight them, and 'git apply --whitespace=error' will
574 consider them as errors. You can prefix `-` to disable
575 any of them (e.g. `-trailing-space`):
576+
577* `blank-at-eol` treats trailing whitespaces at the end of the line
578 as an error (enabled by default).
579* `space-before-tab` treats a space character that appears immediately
580 before a tab character in the initial indent part of the line as an
581 error (enabled by default).
582* `indent-with-non-tab` treats a line that is indented with space
583 characters instead of the equivalent tabs as an error (not enabled by
584 default).
585* `tab-in-indent` treats a tab character in the initial indent part of
586 the line as an error (not enabled by default).
587* `blank-at-eof` treats blank lines added at the end of file as an error
588 (enabled by default).
589* `trailing-space` is a short-hand to cover both `blank-at-eol` and
590 `blank-at-eof`.
591* `cr-at-eol` treats a carriage-return at the end of line as
592 part of the line terminator, i.e. with it, `trailing-space`
593 does not trigger if the character before such a carriage-return
594 is not a whitespace (not enabled by default).
595* `tabwidth=<n>` tells how many character positions a tab occupies; this
596 is relevant for `indent-with-non-tab` and when Git fixes `tab-in-indent`
597 errors. The default tab width is 8. Allowed values are 1 to 63.
598
b9f5d035
NS
599core.fsync::
600 A comma-separated list of components of the repository that
601 should be hardened via the core.fsyncMethod when created or
602 modified. You can disable hardening of any component by
603 prefixing it with a '-'. Items that are not hardened may be
604 lost in the event of an unclean system shutdown. Unless you
605 have special requirements, it is recommended that you leave
606 this option empty or pick one of `committed`, `added`,
607 or `all`.
608+
609When this configuration is encountered, the set of components starts with
610the platform default value, disabled components are removed, and additional
611components are added. `none` resets the state so that the platform default
612is ignored.
613+
614The empty string resets the fsync configuration to the platform
615default. The default on most platforms is equivalent to
616`core.fsync=committed,-loose-object`, which has good performance,
617but risks losing recent work in the event of an unclean system shutdown.
618+
619* `none` clears the set of fsynced components.
620* `loose-object` hardens objects added to the repo in loose-object form.
621* `pack` hardens objects added to the repo in packfile form.
622* `pack-metadata` hardens packfile bitmaps and indexes.
776ba91a 623* `commit-graph` hardens the commit-graph file.
b9f5d035
NS
624* `index` hardens the index when it is modified.
625* `objects` is an aggregate option that is equivalent to
626 `loose-object,pack`.
bc22d845 627* `reference` hardens references modified in the repo.
b9f5d035
NS
628* `derived-metadata` is an aggregate option that is equivalent to
629 `pack-metadata,commit-graph`.
630* `committed` is an aggregate option that is currently equivalent to
631 `objects`. This mode sacrifices some performance to ensure that work
632 that is committed to the repository with `git commit` or similar commands
633 is hardened.
634* `added` is an aggregate option that is currently equivalent to
635 `committed,index`. This mode sacrifices additional performance to
636 ensure that the results of commands like `git add` and similar operations
637 are hardened.
638* `all` is an aggregate option that syncs all individual components above.
639
abf38abe
NS
640core.fsyncMethod::
641 A value indicating the strategy Git will use to harden repository data
642 using fsync and related primitives.
643+
644* `fsync` uses the fsync() system call or platform equivalents.
645* `writeout-only` issues pagecache writeback requests, but depending on the
646 filesystem and storage hardware, data added to the repository may not be
647 durable in the event of a system crash. This is the default mode on macOS.
c0f4752e
NS
648* `batch` enables a mode that uses writeout-only flushes to stage multiple
649 updates in the disk writeback cache and then does a single full fsync of
650 a dummy file to trigger the disk cache flush at the end of the operation.
651+
652Currently `batch` mode only applies to loose-object files. Other repository
653data is made durable as if `fsync` was specified. This mode is expected to
654be as safe as `fsync` on macOS for repos stored on HFS+ or APFS filesystems
655and on Windows for repos stored on NTFS or ReFS filesystems.
abf38abe 656
1a394fa9
NTND
657core.fsyncObjectFiles::
658 This boolean will enable 'fsync()' when writing object files.
844a8ad4 659 This setting is deprecated. Use core.fsync instead.
1a394fa9 660+
844a8ad4
NS
661This setting affects data added to the Git repository in loose-object
662form. When set to true, Git will issue an fsync or similar system call
663to flush caches so that loose-objects remain consistent in the face
664of a unclean system shutdown.
1a394fa9
NTND
665
666core.preloadIndex::
667 Enable parallel index preload for operations like 'git diff'
668+
669This can speed up operations like 'git diff' and 'git status' especially
670on filesystems like NFS that have weak caching semantics and thus
671relatively high IO latencies. When enabled, Git will do the
672index comparison to the filesystem data in parallel, allowing
673overlapping IO's. Defaults to true.
674
6c268fdd
JH
675core.unsetenvvars::
676 Windows-only: comma-separated list of environment variables'
677 names that need to be unset before spawning any other process.
678 Defaults to `PERL5LIB` to account for the fact that Git for
679 Windows insists on using its own Perl interpreter.
680
ac33519d
JS
681core.restrictinheritedhandles::
682 Windows-only: override whether spawned processes inherit only standard
683 file handles (`stdin`, `stdout` and `stderr`) or all handles. Can be
684 `auto`, `true` or `false`. Defaults to `auto`, which means `true` on
685 Windows 7 and later, and `false` on older Windows versions.
686
1a394fa9
NTND
687core.createObject::
688 You can set this to 'link', in which case a hardlink followed by
689 a delete of the source are used to make sure that object creation
690 will not overwrite existing objects.
691+
692On some file system/operating system combinations, this is unreliable.
693Set this config setting to 'rename' there; However, This will remove the
694check that makes sure that existing object files will not get overwritten.
695
696core.notesRef::
697 When showing commit messages, also show notes which are stored in
698 the given ref. The ref must be fully qualified. If the given
699 ref does not exist, it is not an error but means that no
700 notes should be printed.
701+
702This setting defaults to "refs/notes/commits", and it can be overridden by
703the `GIT_NOTES_REF` environment variable. See linkgit:git-notes[1].
704
705core.commitGraph::
706 If true, then git will read the commit-graph file (if it exists)
31b1de6a 707 to parse the graph structure of commits. Defaults to true. See
1a394fa9
NTND
708 linkgit:git-commit-graph[1] for more information.
709
710core.useReplaceRefs::
711 If set to `false`, behave as if the `--no-replace-objects`
712 option was given on the command line. See linkgit:git[1] and
713 linkgit:git-replace[1] for more information.
714
715core.multiPackIndex::
716 Use the multi-pack-index file to track multiple packfiles using a
18e449f8
DS
717 single index. See linkgit:git-multi-pack-index[1] for more
718 information. Defaults to true.
1a394fa9
NTND
719
720core.sparseCheckout::
879321eb
DS
721 Enable "sparse checkout" feature. See linkgit:git-sparse-checkout[1]
722 for more information.
723
724core.sparseCheckoutCone::
725 Enables the "cone mode" of the sparse checkout feature. When the
2d95707a 726 sparse-checkout file contains a limited set of patterns, this
ae436f28
727 mode provides significant performance advantages. The "non-cone
728 mode" can be requested to allow specifying more flexible
2d95707a 729 patterns by setting this variable to 'false'. See
879321eb 730 linkgit:git-sparse-checkout[1] for more information.
1a394fa9
NTND
731
732core.abbrev::
733 Set the length object names are abbreviated to. If
734 unspecified or set to "auto", an appropriate value is
735 computed based on the approximate number of packed objects
736 in your repository, which hopefully is enough for
737 abbreviated object names to stay unique for some time.
a9ecaa06
EW
738 If set to "no", no abbreviation is made and the object names
739 are shown in their full length.
1a394fa9 740 The minimum length is 4.
be20128b
JK
741
742core.maxTreeDepth::
743 The maximum depth Git is willing to recurse while traversing a
744 tree (e.g., "a/b/cde/f" has a depth of 4). This is a fail-safe
745 to allow Git to abort cleanly, and should not generally need to
746 be adjusted. The default is 4096.