Skip to content
Snippets Groups Projects
git-credential.txt 5.87 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    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 credential.h for more
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    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
    information 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 information (e.g. host, protocol, path), or to the actual
    credential data to be obtained (username/password).
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    
    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.
    
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    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.
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    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").
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    
    `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).
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    
    `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 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.
    
    
    GIT
    ---
    Part of the linkgit:git[1] suite