1gitcredentials(7) 2================= 3 4NAME 5---- 6gitcredentials - providing usernames and passwords to Git 7 8SYNOPSIS 9-------- 10------------------ 11git config credential.https://example.com.username myusername 12git config credential.helper "$helper $options" 13------------------ 14 15DESCRIPTION 16----------- 17 18Git will sometimes need credentials from the user in order to perform 19operations; for example, it may need to ask for a username and password 20in order to access a remote repository over HTTP. This manual describes 21the mechanisms Git uses to request these credentials, as well as some 22features to avoid inputting these credentials repeatedly. 23 24REQUESTING CREDENTIALS 25---------------------- 26 27Without any credential helpers defined, Git will try the following 28strategies to ask the user for usernames and passwords: 29 301. If the `GIT_ASKPASS` environment variable is set, the program 31 specified by the variable is invoked. A suitable prompt is provided 32 to the program on the command line, and the user's input is read 33 from its standard output. 34 352. Otherwise, if the `core.askPass` configuration variable is set, its 36 value is used as above. 37 383. Otherwise, if the `SSH_ASKPASS` environment variable is set, its 39 value is used as above. 40 414. Otherwise, the user is prompted on the terminal. 42 43AVOIDING REPETITION 44------------------- 45 46It can be cumbersome to input the same credentials over and over. Git 47provides two methods to reduce this annoyance: 48 491. Static configuration of usernames for a given authentication context. 50 512. Credential helpers to cache or store passwords, or to interact with 52 a system password wallet or keychain. 53 54The first is simple and appropriate if you do not have secure storage available 55for a password. It is generally configured by adding this to your config: 56 57--------------------------------------- 58[credential "https://example.com"] 59 username = me 60--------------------------------------- 61 62Credential helpers, on the other hand, are external programs from which Git can 63request both usernames and passwords; they typically interface with secure 64storage provided by the OS or other programs. 65 66To use a helper, you must first select one to use. Git currently 67includes the following helpers: 68 69cache:: 70 71 Cache credentials in memory for a short period of time. See 72 linkgit:git-credential-cache[1] for details. 73 74store:: 75 76 Store credentials indefinitely on disk. See 77 linkgit:git-credential-store[1] for details. 78 79You may also have third-party helpers installed; search for 80`credential-*` in the output of `git help -a`, and consult the 81documentation of individual helpers. Once you have selected a helper, 82you can tell Git to use it by putting its name into the 83credential.helper variable. 84 851. Find a helper. 86+ 87------------------------------------------- 88$ git help -a | grep credential- 89credential-foo 90------------------------------------------- 91 922. Read its description. 93+ 94------------------------------------------- 95$ git help credential-foo 96------------------------------------------- 97 983. Tell Git to use it. 99+ 100------------------------------------------- 101$ git config --global credential.helper foo 102------------------------------------------- 103 104 105CREDENTIAL CONTEXTS 106------------------- 107 108Git considers each credential to have a context defined by a URL. This context 109is used to look up context-specific configuration, and is passed to any 110helpers, which may use it as an index into secure storage. 111 112For instance, imagine we are accessing `https://example.com/foo.git`. When Git 113looks into a config file to see if a section matches this context, it will 114consider the two a match if the context is a more-specific subset of the 115pattern in the config file. For example, if you have this in your config file: 116 117-------------------------------------- 118[credential "https://example.com"] 119 username = foo 120-------------------------------------- 121 122then we will match: both protocols are the same, both hosts are the same, and 123the "pattern" URL does not care about the path component at all. However, this 124context would not match: 125 126-------------------------------------- 127[credential "https://kernel.org"] 128 username = foo 129-------------------------------------- 130 131because the hostnames differ. Nor would it match `foo.example.com`; Git 132compares hostnames exactly, without considering whether two hosts are part of 133the same domain. Likewise, a config entry for `http://example.com` would not 134match: Git compares the protocols exactly. 135 136If the "pattern" URL does include a path component, then this too must match 137exactly: the context `https://example.com/bar/baz.git` will match a config 138entry for `https://example.com/bar/baz.git` (in addition to matching the config 139entry for `https://example.com`) but will not match a config entry for 140`https://example.com/bar`. 141 142 143CONFIGURATION OPTIONS 144--------------------- 145 146Options for a credential context can be configured either in 147`credential.*` (which applies to all credentials), or 148`credential.<url>.*`, where <url> matches the context as described 149above. 150 151The following options are available in either location: 152 153helper:: 154 155 The name of an external credential helper, and any associated options. 156 If the helper name is not an absolute path, then the string `git 157 credential-` is prepended. The resulting string is executed by the 158 shell (so, for example, setting this to `foo --option=bar` will execute 159 `git credential-foo --option=bar` via the shell. See the manual of 160 specific helpers for examples of their use. 161+ 162If there are multiple instances of the `credential.helper` configuration 163variable, each helper will be tried in turn, and may provide a username, 164password, or nothing. Once Git has acquired both a username and a 165password, no more helpers will be tried. 166+ 167If `credential.helper` is configured to the empty string, this resets 168the helper list to empty (so you may override a helper set by a 169lower-priority config file by configuring the empty-string helper, 170followed by whatever set of helpers you would like). 171 172username:: 173 174 A default username, if one is not provided in the URL. 175 176useHttpPath:: 177 178 By default, Git does not consider the "path" component of an http URL 179 to be worth matching via external helpers. This means that a credential 180 stored for `https://example.com/foo.git` will also be used for 181 `https://example.com/bar.git`. If you do want to distinguish these 182 cases, set this option to `true`. 183 184 185CUSTOM HELPERS 186-------------- 187 188You can write your own custom helpers to interface with any system in 189which you keep credentials. See the documentation for Git's 190link:technical/api-credentials.html[credentials API] for details. 191 192GIT 193--- 194Part of the linkgit:git[1] suite