diff.autoRefreshIndex::
	When using 'git diff' to compare with work tree
	files, do not consider stat-only change as changed.
	Instead, silently run `git update-index --refresh` to
	update the cached stat information for paths whose
	contents in the work tree match the contents in the
	index.  This option defaults to true.  Note that this
	affects only 'git diff' Porcelain, and not lower level
	'diff' commands such as 'git diff-files'.

diff.dirstat::
	A comma separated list of `--dirstat` parameters specifying the
	default behavior of the `--dirstat` option to linkgit:git-diff[1]
	and friends. The defaults can be overridden on the command line
	(using `--dirstat=<param1,param2,...>`). The fallback defaults
	(when not changed by `diff.dirstat`) are `changes,noncumulative,3`.
	The following parameters are available:
+
--
`changes`;;
	Compute the dirstat numbers by counting the lines that have been
	removed from the source, or added to the destination. This ignores
	the amount of pure code movements within a file.  In other words,
	rearranging lines in a file is not counted as much as other changes.
	This is the default behavior when no parameter is given.
`lines`;;
	Compute the dirstat numbers by doing the regular line-based diff
	analysis, and summing the removed/added line counts. (For binary
	files, count 64-byte chunks instead, since binary files have no
	natural concept of lines). This is a more expensive `--dirstat`
	behavior than the `changes` behavior, but it does count rearranged
	lines within a file as much as other changes. The resulting output
	is consistent with what you get from the other `--*stat` options.
`files`;;
	Compute the dirstat numbers by counting the number of files changed.
	Each changed file counts equally in the dirstat analysis. This is
	the computationally cheapest `--dirstat` behavior, since it does
	not have to look at the file contents at all.
`cumulative`;;
	Count changes in a child directory for the parent directory as well.
	Note that when using `cumulative`, the sum of the percentages
	reported may exceed 100%. The default (non-cumulative) behavior can
	be specified with the `noncumulative` parameter.
<limit>;;
	An integer parameter specifies a cut-off percent (3% by default).
	Directories contributing less than this percentage of the changes
	are not shown in the output.
--
+
Example: The following will count changed files, while ignoring
directories with less than 10% of the total amount of changed files,
and accumulating child directory counts in the parent directories:
`files,10,cumulative`.

diff.statGraphWidth::
	Limit the width of the graph part in --stat output. If set, applies
	to all commands generating --stat output except format-patch.

diff.context::
	Generate diffs with <n> lines of context instead of the default
	of 3. This value is overridden by the -U option.

diff.interHunkContext::
	Show the context between diff hunks, up to the specified number
	of lines, thereby fusing the hunks that are close to each other.
	This value serves as the default for the `--inter-hunk-context`
	command line option.

diff.external::
	If this config variable is set, diff generation is not
	performed using the internal diff machinery, but using the
	given command.  Can be overridden with the `GIT_EXTERNAL_DIFF'
	environment variable.  The command is called with parameters
	as described under "git Diffs" in linkgit:git[1].  Note: if
	you want to use an external diff program only on a subset of
	your files, you might want to use linkgit:gitattributes[5] instead.

diff.ignoreSubmodules::
	Sets the default value of --ignore-submodules. Note that this
	affects only 'git diff' Porcelain, and not lower level 'diff'
	commands such as 'git diff-files'. 'git checkout' also honors
	this setting when reporting uncommitted changes. Setting it to
	'all' disables the submodule summary normally shown by 'git commit'
	and 'git status' when `status.submoduleSummary` is set unless it is
	overridden by using the --ignore-submodules command-line option.
	The 'git submodule' commands are not affected by this setting.

diff.mnemonicPrefix::
	If set, 'git diff' uses a prefix pair that is different from the
	standard "a/" and "b/" depending on what is being compared.  When
	this configuration is in effect, reverse diff output also swaps
	the order of the prefixes:
`git diff`;;
	compares the (i)ndex and the (w)ork tree;
`git diff HEAD`;;
	 compares a (c)ommit and the (w)ork tree;
`git diff --cached`;;
	compares a (c)ommit and the (i)ndex;
`git diff HEAD:file1 file2`;;
	compares an (o)bject and a (w)ork tree entity;
`git diff --no-index a b`;;
	compares two non-git things (1) and (2).

diff.noprefix::
	If set, 'git diff' does not show any source or destination prefix.

diff.orderFile::
	File indicating how to order files within a diff.
	See the '-O' option to linkgit:git-diff[1] for details.
	If `diff.orderFile` is a relative pathname, it is treated as
	relative to the top of the working tree.

diff.renameLimit::
	The number of files to consider when performing the copy/rename
	detection; equivalent to the 'git diff' option `-l`. This setting
	has no effect if rename detection is turned off.

diff.renames::
	Whether and how Git detects renames.  If set to "false",
	rename detection is disabled. If set to "true", basic rename
	detection is enabled.  If set to "copies" or "copy", Git will
	detect copies, as well.  Defaults to true.  Note that this
	affects only 'git diff' Porcelain like linkgit:git-diff[1] and
	linkgit:git-log[1], and not lower level commands such as
	linkgit:git-diff-files[1].

diff.suppressBlankEmpty::
	A boolean to inhibit the standard behavior of printing a space
	before each empty output line. Defaults to false.

diff.submodule::
	Specify the format in which differences in submodules are
	shown.  The "short" format just shows the names of the commits
	at the beginning and end of the range. The "log" format lists
	the commits in the range like linkgit:git-submodule[1] `summary`
	does. The "diff" format shows an inline diff of the changed
	contents of the submodule. Defaults to "short".

diff.wordRegex::
	A POSIX Extended Regular Expression used to determine what is a "word"
	when performing word-by-word difference calculations.  Character
	sequences that match the regular expression are "words", all other
	characters are *ignorable* whitespace.

diff.<driver>.command::
	The custom diff driver command.  See linkgit:gitattributes[5]
	for details.

diff.<driver>.xfuncname::
	The regular expression that the diff driver should use to
	recognize the hunk header.  A built-in pattern may also be used.
	See linkgit:gitattributes[5] for details.

diff.<driver>.binary::
	Set this option to true to make the diff driver treat files as
	binary.  See linkgit:gitattributes[5] for details.

diff.<driver>.textconv::
	The command that the diff driver should call to generate the
	text-converted version of a file.  The result of the
	conversion is used to generate a human-readable diff.  See
	linkgit:gitattributes[5] for details.

diff.<driver>.wordRegex::
	The regular expression that the diff driver should use to
	split words in a line.  See linkgit:gitattributes[5] for
	details.

diff.<driver>.cachetextconv::
	Set this option to true to make the diff driver cache the text
	conversion outputs.  See linkgit:gitattributes[5] for details.

diff.tool::
	Controls which diff tool is used by linkgit:git-difftool[1].
	This variable overrides the value configured in `merge.tool`.
	The list below shows the valid built-in values.
	Any other value is treated as a custom diff tool and requires
	that a corresponding difftool.<tool>.cmd variable is defined.

diff.guitool::
	Controls which diff tool is used by linkgit:git-difftool[1] when
	the -g/--gui flag is specified. This variable overrides the value
	configured in `merge.guitool`. The list below shows the valid
	built-in values. Any other value is treated as a custom diff tool
	and requires that a corresponding difftool.<guitool>.cmd variable
	is defined.

include::../mergetools-diff.txt[]

diff.indentHeuristic::
	Set this option to `true` to enable experimental heuristics
	that shift diff hunk boundaries to make patches easier to read.

diff.algorithm::
	Choose a diff algorithm.  The variants are as follows:
+
--
`default`, `myers`;;
	The basic greedy diff algorithm. Currently, this is the default.
`minimal`;;
	Spend extra time to make sure the smallest possible diff is
	produced.
`patience`;;
	Use "patience diff" algorithm when generating patches.
`histogram`;;
	This algorithm extends the patience algorithm to "support
	low-occurrence common elements".
--
+

diff.wsErrorHighlight::
	Highlight whitespace errors in the `context`, `old` or `new`
	lines of the diff.  Multiple values are separated by comma,
	`none` resets previous values, `default` reset the list to
	`new` and `all` is a shorthand for `old,new,context`.  The
	whitespace errors are colored with `color.diff.whitespace`.
	The command line option `--ws-error-highlight=<kind>`
	overrides this setting.

diff.colorMoved::
	If set to either a valid `<mode>` or a true value, moved lines
	in a diff are colored differently, for details of valid modes
	see '--color-moved' in linkgit:git-diff[1]. If simply set to
	true the default color mode will be used. When set to false,
	moved lines are not colored.

diff.colorMovedWS::
	When moved lines are colored using e.g. the `diff.colorMoved` setting,
	this option controls the `<mode>` how spaces are treated
	for details of valid modes see '--color-moved-ws' in linkgit:git-diff[1].
