git-credential(1)
=================

NAME
----
git-credential - Retrieve and store user credentials

SYNOPSIS
--------
------------------
git credential <fill|approve|reject>
------------------

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

Git has an internal interface for storing and retrieving credentials
from system-specific helpers, as well as prompting the user for
usernames and passwords. The git-credential command exposes this
interface to scripts which may want to retrieve, store, or prompt for
credentials in the same manner as git. The design of this scriptable
interface models the internal C API; see
link:technical/api-credentials.txt[the git credential API] for more
background on the concepts.

git-credential takes an "action" option on the command-line (one of
`fill`, `approve`, or `reject`) and reads a credential description
on stdin (see <<IOFMT,INPUT/OUTPUT FORMAT>>).

If the action is `fill`, git-credential will attempt to add "username"
and "password" attributes to the description by reading config files,
by contacting any configured credential helpers, or by prompting the
user. The username and password attributes of the credential
description are then printed to stdout together with the attributes
already provided.

If the action is `approve`, git-credential will send the description
to any configured credential helpers, which may store the credential
for later use.

If the action is `reject`, git-credential will send the description to
any configured credential helpers, which may erase any stored
credential matching the description.

If the action is `approve` or `reject`, no output should be emitted.

TYPICAL USE OF GIT CREDENTIAL
-----------------------------

An application using git-credential will typically use `git
credential` following these steps:

  1. Generate a credential description based on the context.
+
For example, if we want a password for
`https://example.com/foo.git`, we might generate the following
credential description (don't forget the blank line at the end; it
tells `git credential` that the application finished feeding all the
infomation it has):

	 protocol=https
	 host=example.com
	 path=foo.git

  2. Ask git-credential to give us a username and password for this
     description. This is done by running `git credential fill`,
     feeding the description from step (1) to its standard input. The complete
     credential description (including the credential per se, i.e. the
     login and password) will be produced on standard output, like:

	protocol=https
	host=example.com
	username=bob
	password=secr3t
+
In most cases, this means the attributes given in the input will be
repeated in the output, but git may also modify the credential
description, for example by removing the `path` attribute when the
protocol is HTTP(s) and `credential.useHttpPath` is false.
+
If the `git credential` knew about the password, this step may
not have involved the user actually typing this password (the
user may have typed a password to unlock the keychain instead,
or no user interaction was done if the keychain was already
unlocked) before it returned `password=secr3t`.

  3. Use the credential (e.g., access the URL with the username and
     password from step (2)), and see if it's accepted.

  4. Report on the success or failure of the password. If the
     credential allowed the operation to complete successfully, then
     it can be marked with an "approve" action to tell `git
     credential` to reuse it in its next invocation. If the credential
     was rejected during the operation, use the "reject" action so
     that `git credential` will ask for a new password in its next
     invocation. In either case, `git credential` should be fed with
     the credential description obtained from step (2) (which also
     contain the ones provided in step (1)).

[[IOFMT]]
INPUT/OUTPUT FORMAT
-------------------

`git credential` reads and/or writes (depending on the action used)
credential information in its standard input/output. This information
can correspond either to keys for which `git credential` will obtain
the login/password information (e.g. host, protocol, path), or to the
actual credential data to be obtained (login/password).

The credential is split into a set of named attributes, with one
attribute per line. Each attribute is
specified by a key-value pair, separated by an `=` (equals) sign,
followed by a newline. The key may contain any bytes except `=`,
newline, or NUL. The value may contain any bytes except newline or NUL.
In both cases, all bytes are treated as-is (i.e., there is no quoting,
and one cannot transmit a value with newline or NUL in it). The list of
attributes is terminated by a blank line or end-of-file.
Git understands the following attributes:

`protocol`::

	The protocol over which the credential will be used (e.g.,
	`https`).

`host`::

	The remote hostname for a network credential.

`path`::

	The path with which the credential will be used. E.g., for
	accessing a remote https repository, this will be the
	repository's path on the server.

`username`::

	The credential's username, if we already have one (e.g., from a
	URL, from the user, or from a previously run helper).

`password`::

	The credential's password, if we are asking it to be stored.

`url`::

	When this special attribute is read by `git credential`, the
	value is parsed as a URL and treated as if its constituent parts
	were read (e.g., `url=https://example.com` would behave as if
	`protocol=https` and `host=example.com` had been provided). This
	can help callers avoid parsing URLs themselves.  Note that any
	components which are missing from the URL (e.g., there is no
	username in the example above) will be set to empty; if you want
	to provide a URL and override some attributes, provide the URL
	attribute first, followed by any overrides.
