git-help(1)
===========

NAME
----
git-help - Display help information about Git

SYNOPSIS
--------
[verse]
'git help' [-a|--all [--[no-]verbose]]
	   [[-i|--info] [-m|--man] [-w|--web]] [<command>|<guide>]
'git help' [-g|--guides]
'git help' [-c|--config]

DESCRIPTION
-----------

With no options and no '<command>' or '<guide>' given, the synopsis of the 'git'
command and a list of the most commonly used Git commands are printed
on the standard output.

If the option `--all` or `-a` is given, all available commands are
printed on the standard output.

If the option `--guides` or `-g` is given, a list of the
Git concept guides is also printed on the standard output.

If a command, or a guide, is given, a manual page for that command or
guide is brought up. The 'man' program is used by default for this
purpose, but this can be overridden by other options or configuration
variables.

If an alias is given, git shows the definition of the alias on
standard output. To get the manual page for the aliased command, use
`git <command> --help`.

Note that `git --help ...` is identical to `git help ...` because the
former is internally converted into the latter.

To display the linkgit:git[1] man page, use `git help git`.

This page can be displayed with 'git help help' or `git help --help`

OPTIONS
-------
-a::
--all::
	Prints all the available commands on the standard output. This
	option overrides any given command or guide name.

--verbose::
	When used with `--all` print description for all recognized
	commands. This is the default.

-c::
--config::
	List all available configuration variables. This is a short
	summary of the list in linkgit:git-config[1].

-g::
--guides::
	Prints a list of the Git concept guides on the standard output.

-i::
--info::
	Display manual page for the command in the 'info' format. The
	'info' program will be used for that purpose.

-m::
--man::
	Display manual page for the command in the 'man' format. This
	option may be used to override a value set in the
	`help.format` configuration variable.
+
By default the 'man' program will be used to display the manual page,
but the `man.viewer` configuration variable may be used to choose
other display programs (see below).

-w::
--web::
	Display manual page for the command in the 'web' (HTML)
	format. A web browser will be used for that purpose.
+
The web browser can be specified using the configuration variable
`help.browser`, or `web.browser` if the former is not set. If none of
these config variables is set, the 'git web{litdd}browse' helper script
(called by 'git help') will pick a suitable default. See
linkgit:git-web{litdd}browse[1] for more information about this.

CONFIGURATION VARIABLES
-----------------------

help.format
~~~~~~~~~~~

If no command-line option is passed, the `help.format` configuration
variable will be checked. The following values are supported for this
variable; they make 'git help' behave as their corresponding command-
line option:

* "man" corresponds to '-m|--man',
* "info" corresponds to '-i|--info',
* "web" or "html" correspond to '-w|--web'.

help.browser, web.browser and browser.<tool>.path
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The `help.browser`, `web.browser` and `browser.<tool>.path` will also
be checked if the 'web' format is chosen (either by command-line
option or configuration variable). See '-w|--web' in the OPTIONS
section above and linkgit:git-web{litdd}browse[1].

man.viewer
~~~~~~~~~~

The `man.viewer` configuration variable will be checked if the 'man'
format is chosen. The following values are currently supported:

* "man": use the 'man' program as usual,
* "woman": use 'emacsclient' to launch the "woman" mode in emacs
  (this only works starting with emacsclient versions 22),
* "konqueror": use 'kfmclient' to open the man page in a new konqueror
  tab (see 'Note about konqueror' below).

Values for other tools can be used if there is a corresponding
`man.<tool>.cmd` configuration entry (see below).

Multiple values may be given to the `man.viewer` configuration
variable. Their corresponding programs will be tried in the order
listed in the configuration file.

For example, this configuration:

------------------------------------------------
	[man]
		viewer = konqueror
		viewer = woman
------------------------------------------------

will try to use konqueror first. But this may fail (for example, if
DISPLAY is not set) and in that case emacs' woman mode will be tried.

If everything fails, or if no viewer is configured, the viewer specified
in the `GIT_MAN_VIEWER` environment variable will be tried.  If that
fails too, the 'man' program will be tried anyway.

man.<tool>.path
~~~~~~~~~~~~~~~

You can explicitly provide a full path to your preferred man viewer by
setting the configuration variable `man.<tool>.path`. For example, you
can configure the absolute path to konqueror by setting
'man.konqueror.path'. Otherwise, 'git help' assumes the tool is
available in PATH.

man.<tool>.cmd
~~~~~~~~~~~~~~

When the man viewer, specified by the `man.viewer` configuration
variables, is not among the supported ones, then the corresponding
`man.<tool>.cmd` configuration variable will be looked up. If this
variable exists then the specified tool will be treated as a custom
command and a shell eval will be used to run the command with the man
page passed as arguments.

Note about konqueror
~~~~~~~~~~~~~~~~~~~~

When 'konqueror' is specified in the `man.viewer` configuration
variable, we launch 'kfmclient' to try to open the man page on an
already opened konqueror in a new tab if possible.

For consistency, we also try such a trick if 'man.konqueror.path' is
set to something like `A_PATH_TO/konqueror`. That means we will try to
launch `A_PATH_TO/kfmclient` instead.

If you really want to use 'konqueror', then you can use something like
the following:

------------------------------------------------
	[man]
		viewer = konq

	[man "konq"]
		cmd = A_PATH_TO/konqueror
------------------------------------------------

Note about git config --global
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Note that all these configuration variables should probably be set
using the `--global` flag, for example like this:

------------------------------------------------
$ git config --global help.format web
$ git config --global web.browser firefox
------------------------------------------------

as they are probably more user specific than repository specific.
See linkgit:git-config[1] for more information about this.

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