gitcredential 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 gitcredential will obtain the
login information (e.g. host, protocol, path), or to the actual credential data to be obtained
(username/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. A line, including the trailing newline, may not exceed 65535 bytes in order to allow
implementations to parse efficiently.
Attributes with keys that end with C-style array brackets [] can have multiple values. Each instance of a
multi-valued attribute forms an ordered list of values - the order of the repeated attributes defines the
order of the values. An empty multi-valued attribute (key[]=\n) acts to clear any previous entries and
reset the list.
In all 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. This includes the port number if one was specified
(e.g., "example.com:8088").
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, the configuration, the user, or
from a previously run helper).
password
The credential’s password, if we are asking it to be stored.
password_expiry_utc
Generated passwords such as an OAuth access token may have an expiry date. When reading credentials
from helpers, gitcredentialfill ignores expired passwords. Represented as Unix time UTC, seconds
since 1970.
oauth_refresh_token
An OAuth refresh token may accompany a password that is an OAuth access token. Helpers must treat
this attribute as confidential like the password attribute. Git itself has no special behaviour for
this attribute.
url
When this special attribute is read by gitcredential, 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 specifying a protocol is mandatory and if the URL doesn’t specify a hostname (e.g.,
"cert:///path/to/file") the credential will contain a hostname attribute whose value is an empty
string.
Components which are missing from the URL (e.g., there is no username in the example above) will be
left unset.
authtype
This indicates that the authentication scheme in question should be used. Common values for HTTP and
HTTPS include basic, bearer, and digest, although the latter is insecure and should not be used. If
credential is used, this may be set to an arbitrary string suitable for the protocol in question
(usually HTTP).
This value should not be sent unless the appropriate capability (see below) is provided on input.
credential
The pre-encoded credential, suitable for the protocol in question (usually HTTP). If this key is
sent, authtype is mandatory, and username and password are not used. For HTTP, Git concatenates the
authtype value and this value with a single space to determine the Authorization header.
This value should not be sent unless the appropriate capability (see below) is provided on input.
ephemeral
This boolean value indicates, if true, that the value in the credential field should not be saved by
the credential helper because its usefulness is limited in time. For example, an HTTP Digest
credential value is computed using a nonce and reusing it will not result in successful
authentication. This may also be used for situations with short duration (e.g., 24-hour) credentials.
The default value is false.
The credential helper will still be invoked with store or erase so that it can determine whether the
operation was successful.
This value should not be sent unless the appropriate capability (see below) is provided on input.
state[]
This value provides an opaque state that will be passed back to this helper if it is called again.
Each different credential helper may specify this once. The value should include a prefix unique to
the credential helper and should ignore values that don’t match its prefix.
This value should not be sent unless the appropriate capability (see below) is provided on input.
continue
This is a boolean value, which, if enabled, indicates that this authentication is a non-final part of
a multistage authentication step. This is common in protocols such as NTLM and Kerberos, where two
rounds of client authentication are required, and setting this flag allows the credential helper to
implement the multistage authentication step. This flag should only be sent if a further stage is
required; that is, if another round of authentication is expected.
This value should not be sent unless the appropriate capability (see below) is provided on input.
This attribute is one-way from a credential helper to pass information to Git (or other programs
invoking gitcredential).
wwwauth[]
When an HTTP response is received by Git that includes one or more WWW-Authenticate authentication
headers, these will be passed by Git to credential helpers.
Each WWW-Authenticate header value is passed as a multi-valued attribute wwwauth[], where the order
of the attributes is the same as they appear in the HTTP response. This attribute is one-way from Git
to pass additional information to credential helpers.
capability[]
This signals that Git, or the helper, as appropriate, supports the capability in question. This can
be used to provide better, more specific data as part of the protocol. A capability[] directive must
precede any value depending on it and these directives should be the first item announced in the
protocol.
There are two currently supported capabilities. The first is authtype, which indicates that the
authtype, credential, and ephemeral values are understood. The second is state, which indicates that
the state[] and continue values are understood.
It is not obligatory to use the additional features just because the capability is supported, but
they should not be provided without the capability.
Unrecognised attributes and capabilities are silently discarded.