status.relativePaths::
	By default, linkgit:git-status[1] shows paths relative to the
	current directory. Setting this variable to `false` shows paths
	relative to the repository root (this was the default for Git
	prior to v1.5.4).

status.short::
	Set to true to enable --short by default in linkgit:git-status[1].
	The option --no-short takes precedence over this variable.

status.branch::
	Set to true to enable --branch by default in linkgit:git-status[1].
	The option --no-branch takes precedence over this variable.

status.aheadBehind::
	Set to true to enable `--ahead-behind` and false to enable
	`--no-ahead-behind` by default in linkgit:git-status[1] for
	non-porcelain status formats.  Defaults to true.

status.displayCommentPrefix::
	If set to true, linkgit:git-status[1] will insert a comment
	prefix before each output line (starting with
	`core.commentChar`, i.e. `#` by default). This was the
	behavior of linkgit:git-status[1] in Git 1.8.4 and previous.
	Defaults to false.

status.renameLimit::
	The number of files to consider when performing rename detection
	in linkgit:git-status[1] and linkgit:git-commit[1]. Defaults to
	the value of diff.renameLimit.

status.renames::
	Whether and how Git detects renames in linkgit:git-status[1] and
	linkgit:git-commit[1] .  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 the value of diff.renames.

status.showStash::
	If set to true, linkgit:git-status[1] will display the number of
	entries currently stashed away.
	Defaults to false.

status.showUntrackedFiles::
	By default, linkgit:git-status[1] and linkgit:git-commit[1] show
	files which are not currently tracked by Git. Directories which
	contain only untracked files, are shown with the directory name
	only. Showing untracked files means that Git needs to lstat() all
	the files in the whole repository, which might be slow on some
	systems. So, this variable controls how the commands display
	the untracked files. Possible values are:
+
--
* `no` - Show no untracked files.
* `normal` - Show untracked files and directories.
* `all` - Show also individual files in untracked directories.
--
+
If this variable is not specified, it defaults to 'normal'.
This variable can be overridden with the -u|--untracked-files option
of linkgit:git-status[1] and linkgit:git-commit[1].

status.submoduleSummary::
	Defaults to false.
	If this is set to a non-zero number or true (identical to -1 or an
	unlimited number), the submodule summary will be enabled and a
	summary of commits for modified submodules will be shown (see
	--summary-limit option of linkgit:git-submodule[1]). Please note
	that the summary output command will be suppressed for all
	submodules when `diff.ignoreSubmodules` is set to 'all' or only
	for those submodules where `submodule.<name>.ignore=all`. The only
	exception to that rule is that status and commit will show staged
	submodule changes. To
	also view the summary for ignored submodules you can either use
	the --ignore-submodules=dirty command-line option or the 'git
	submodule summary' command, which shows a similar output but does
	not honor these settings.
