docs: end-user documentation for the credential subsystem

The credential API and helper format is already defined in technical/api-credentials.txt. This presents the end-user view. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Dec 10, 2011 at 05:31 UTC a6fc9fd3f4b42cd97b5262026e18bd451c28ee3c
3 files changed +195
Documentation/Makefile
+1
@@ -7,6 +7,7 @@ MAN5_TXT=gitattributes.txt gitignore.txt gitmodules.txt githooks.txt \
7 MAN7_TXT=gitcli.txt gittutorial.txt gittutorial-2.txt \
8 gitcvs-migration.txt gitcore-tutorial.txt gitglossary.txt \
9 gitdiffcore.txt gitnamespaces.txt gitrevisions.txt gitworkflows.txt
10 +MAN7_TXT += gitcredentials.txt
11
12 MAN_TXT = $(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT)
13 MAN_XML=$(patsubst %.txt,%.xml,$(MAN_TXT))
Documentation/config.txt
+23
@@ -832,6 +832,29 @@ commit.template::
832 "{tilde}/" is expanded to the value of `$HOME` and "{tilde}user/" to the
833 specified user's home directory.
834
835 +credential.helper::
836 + Specify an external helper to be called when a username or
837 + password credential is needed; the helper may consult external
838 + storage to avoid prompting the user for the credentials. See
839 + linkgit:gitcredentials[7] for details.
840 +
841 +credential.useHttpPath::
842 + When acquiring credentials, consider the "path" component of an http
843 + or https URL to be important. Defaults to false. See
844 + linkgit:gitcredentials[7] for more information.
845 +
846 +credential.username::
847 + If no username is set for a network authentication, use this username
848 + by default. See credential.<context>.* below, and
849 + linkgit:gitcredentials[7].
850 +
851 +credential.<url>.*::
852 + Any of the credential.* options above can be applied selectively to
853 + some credentials. For example "credential.https://example.com.username"
854 + would set the default username only for https connections to
855 + example.com. See linkgit:gitcredentials[7] for details on how URLs are
856 + matched.
857 +
858 include::diff-config.txt[]
859
860 difftool.<tool>.path::
Documentation/gitcredentials.txt new
+171
@@ -0,0 +1,171 @@
1 +gitcredentials(7)
2 +=================
3 +
4 +NAME
5 +----
6 +gitcredentials - providing usernames and passwords to git
7 +
8 +SYNOPSIS
9 +--------
10 +------------------
11 +git config credential.https://example.com.username myusername
12 +git config credential.helper "$helper $options"
13 +------------------
14 +
15 +DESCRIPTION
16 +-----------
17 +
18 +Git will sometimes need credentials from the user in order to perform
19 +operations; for example, it may need to ask for a username and password
20 +in order to access a remote repository over HTTP. This manual describes
21 +the mechanisms git uses to request these credentials, as well as some
22 +features to avoid inputting these credentials repeatedly.
23 +
24 +REQUESTING CREDENTIALS
25 +----------------------
26 +
27 +Without any credential helpers defined, git will try the following
28 +strategies to ask the user for usernames and passwords:
29 +
30 +1. 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 +
35 +2. Otherwise, if the `core.askpass` configuration variable is set, its
36 + value is used as above.
37 +
38 +3. Otherwise, if the `SSH_ASKPASS` environment variable is set, its
39 + value is used as above.
40 +
41 +4. Otherwise, the user is prompted on the terminal.
42 +
43 +AVOIDING REPETITION
44 +-------------------
45 +
46 +It can be cumbersome to input the same credentials over and over. Git
47 +provides two methods to reduce this annoyance:
48 +
49 +1. Static configuration of usernames for a given authentication context.
50 +
51 +2. Credential helpers to cache or store passwords, or to interact with
52 + a system password wallet or keychain.
53 +
54 +The first is simple and appropriate if you do not have secure storage available
55 +for a password. It is generally configured by adding this to your config:
56 +
57 +---------------------------------------
58 +[credential "https://example.com"]
59 + username = me
60 +---------------------------------------
61 +
62 +Credential helpers, on the other hand, are external programs from which git can
63 +request both usernames and passwords; they typically interface with secure
64 +storage provided by the OS or other programs.
65 +
66 +To use a helper, you must first select one to use. Git does not yet
67 +include any credential helpers, but you may have third-party helpers
68 +installed; search for `credential-*` in the output of `git help -a`, and
69 +consult the documentation of individual helpers. Once you have selected
70 +a helper, you can tell git to use it by putting its name into the
71 +credential.helper variable.
72 +
73 +1. Find a helper.
74 ++
75 +-------------------------------------------
76 +$ git help -a | grep credential-
77 +credential-foo
78 +-------------------------------------------
79 +
80 +2. Read its description.
81 ++
82 +-------------------------------------------
83 +$ git help credential-foo
84 +-------------------------------------------
85 +
86 +3. Tell git to use it.
87 ++
88 +-------------------------------------------
89 +$ git config --global credential.helper foo
90 +-------------------------------------------
91 +
92 +If there are multiple instances of the `credential.helper` configuration
93 +variable, each helper will be tried in turn, and may provide a username,
94 +password, or nothing. Once git has acquired both a username and a
95 +password, no more helpers will be tried.
96 +
97 +
98 +CREDENTIAL CONTEXTS
99 +-------------------
100 +
101 +Git considers each credential to have a context defined by a URL. This context
102 +is used to look up context-specific configuration, and is passed to any
103 +helpers, which may use it as an index into secure storage.
104 +
105 +For instance, imagine we are accessing `https://example.com/foo.git`. When git
106 +looks into a config file to see if a section matches this context, it will
107 +consider the two a match if the context is a more-specific subset of the
108 +pattern in the config file. For example, if you have this in your config file:
109 +
110 +--------------------------------------
111 +[credential "https://example.com"]
112 + username = foo
113 +--------------------------------------
114 +
115 +then we will match: both protocols are the same, both hosts are the same, and
116 +the "pattern" URL does not care about the path component at all. However, this
117 +context would not match:
118 +
119 +--------------------------------------
120 +[credential "https://kernel.org"]
121 + username = foo
122 +--------------------------------------
123 +
124 +because the hostnames differ. Nor would it match `foo.example.com`; git
125 +compares hostnames exactly, without considering whether two hosts are part of
126 +the same domain. Likewise, a config entry for `http://example.com` would not
127 +match: git compares the protocols exactly.
128 +
129 +
130 +CONFIGURATION OPTIONS
131 +---------------------
132 +
133 +Options for a credential context can be configured either in
134 +`credential.\*` (which applies to all credentials), or
135 +`credential.<url>.\*`, where <url> matches the context as described
136 +above.
137 +
138 +The following options are available in either location:
139 +
140 +helper::
141 +
142 + The name of an external credential helper, and any associated options.
143 + If the helper name is not an absolute path, then the string `git
144 + credential-` is prepended. The resulting string is executed by the
145 + shell (so, for example, setting this to `foo --option=bar` will execute
146 + `git credential-foo --option=bar` via the shell. See the manual of
147 + specific helpers for examples of their use.
148 +
149 +username::
150 +
151 + A default username, if one is not provided in the URL.
152 +
153 +useHttpPath::
154 +
155 + By default, git does not consider the "path" component of an http URL
156 + to be worth matching via external helpers. This means that a credential
157 + stored for `https://example.com/foo.git` will also be used for
158 + `https://example.com/bar.git`. If you do want to distinguish these
159 + cases, set this option to `true`.
160 +
161 +
162 +CUSTOM HELPERS
163 +--------------
164 +
165 +You can write your own custom helpers to interface with any system in
166 +which you keep credentials. See the documentation for git's
167 +link:technical/api-credentials.html[credentials API] for details.
168 +
169 +GIT
170 +---
171 +Part of the linkgit:git[1] suite