git-var(1)
==========

NAME
----
git-var - Show a Git logical variable


SYNOPSIS
--------
[verse]
'git var' (-l | <variable>)

DESCRIPTION
-----------
Prints a Git logical variable. Exits with code 1 if the variable has
no value.

OPTIONS
-------
-l::
	Cause the logical variables to be listed. In addition, all the
	variables of the Git configuration file .git/config are listed
	as well. (However, the configuration variables listing functionality
	is deprecated in favor of `git config -l`.)

EXAMPLES
--------
	$ git var GIT_AUTHOR_IDENT
	Eric W. Biederman <ebiederm@lnxi.com> 1121223278 -0600


VARIABLES
---------
GIT_AUTHOR_IDENT::
    The author of a piece of code.

GIT_COMMITTER_IDENT::
    The person who put a piece of code into Git.

GIT_EDITOR::
    Text editor for use by Git commands.  The value is meant to be
    interpreted by the shell when it is used.  Examples: `~/bin/vi`,
    `$SOME_ENVIRONMENT_VARIABLE`, `"C:\Program Files\Vim\gvim.exe"
    --nofork`.  The order of preference is the `$GIT_EDITOR`
    environment variable, then `core.editor` configuration, then
    `$VISUAL`, then `$EDITOR`, and then the default chosen at compile
    time, which is usually 'vi'.
ifdef::git-default-editor[]
    The build you are using chose '{git-default-editor}' as the default.
endif::git-default-editor[]

GIT_SEQUENCE_EDITOR::
    Text editor used to edit the 'todo' file while running `git rebase
    -i`. Like `GIT_EDITOR`, the value is meant to be interpreted by
    the shell when it is used. The order of preference is the
    `$GIT_SEQUENCE_EDITOR` environment variable, then
    `sequence.editor` configuration, and then the value of `git var
    GIT_EDITOR`.

GIT_PAGER::
    Text viewer for use by Git commands (e.g., 'less').  The value
    is meant to be interpreted by the shell.  The order of preference
    is the `$GIT_PAGER` environment variable, then `core.pager`
    configuration, then `$PAGER`, and then the default chosen at
    compile time (usually 'less').
ifdef::git-default-pager[]
    The build you are using chose '{git-default-pager}' as the default.
endif::git-default-pager[]

GIT_DEFAULT_BRANCH::
    The name of the first branch created in newly initialized repositories.

GIT_SHELL_PATH::
    The path of the binary providing the POSIX shell for commands which use the shell.

GIT_ATTR_SYSTEM::
    The path to the system linkgit:gitattributes[5] file, if one is enabled.

GIT_ATTR_GLOBAL::
    The path to the global (per-user) linkgit:gitattributes[5] file.

GIT_CONFIG_SYSTEM::
    The path to the system configuration file, if one is enabled.

GIT_CONFIG_GLOBAL::
    The path to the global (per-user) configuration files, if any.

Most path values contain only one value. However, some can contain multiple
values, which are separated by newlines, and are listed in order from highest to
lowest priority.  Callers should be prepared for any such path value to contain
multiple items.

Note that paths are printed even if they do not exist, but not if they are
disabled by other environment variables.

SEE ALSO
--------
linkgit:git-commit-tree[1]
linkgit:git-tag[1]
linkgit:git-config[1]

GIT
---
Part of the linkgit:git[1] suite
