|
|
|
@ -186,7 +186,94 @@ CUSTOM HELPERS
@@ -186,7 +186,94 @@ CUSTOM HELPERS
|
|
|
|
|
-------------- |
|
|
|
|
|
|
|
|
|
You can write your own custom helpers to interface with any system in |
|
|
|
|
which you keep credentials. See credential.h for details. |
|
|
|
|
which you keep credentials. |
|
|
|
|
|
|
|
|
|
Credential helpers are programs executed by Git to fetch or save |
|
|
|
|
credentials from and to long-term storage (where "long-term" is simply |
|
|
|
|
longer than a single Git process; e.g., credentials may be stored |
|
|
|
|
in-memory for a few minutes, or indefinitely on disk). |
|
|
|
|
|
|
|
|
|
Each helper is specified by a single string in the configuration |
|
|
|
|
variable `credential.helper` (and others, see linkgit:git-config[1]). |
|
|
|
|
The string is transformed by Git into a command to be executed using |
|
|
|
|
these rules: |
|
|
|
|
|
|
|
|
|
1. If the helper string begins with "!", it is considered a shell |
|
|
|
|
snippet, and everything after the "!" becomes the command. |
|
|
|
|
|
|
|
|
|
2. Otherwise, if the helper string begins with an absolute path, the |
|
|
|
|
verbatim helper string becomes the command. |
|
|
|
|
|
|
|
|
|
3. Otherwise, the string "git credential-" is prepended to the helper |
|
|
|
|
string, and the result becomes the command. |
|
|
|
|
|
|
|
|
|
The resulting command then has an "operation" argument appended to it |
|
|
|
|
(see below for details), and the result is executed by the shell. |
|
|
|
|
|
|
|
|
|
Here are some example specifications: |
|
|
|
|
|
|
|
|
|
---------------------------------------------------- |
|
|
|
|
# run "git credential-foo" |
|
|
|
|
foo |
|
|
|
|
|
|
|
|
|
# same as above, but pass an argument to the helper |
|
|
|
|
foo --bar=baz |
|
|
|
|
|
|
|
|
|
# the arguments are parsed by the shell, so use shell |
|
|
|
|
# quoting if necessary |
|
|
|
|
foo --bar="whitespace arg" |
|
|
|
|
|
|
|
|
|
# you can also use an absolute path, which will not use the git wrapper |
|
|
|
|
/path/to/my/helper --with-arguments |
|
|
|
|
|
|
|
|
|
# or you can specify your own shell snippet |
|
|
|
|
!f() { echo "password=`cat $HOME/.secret`"; }; f |
|
|
|
|
---------------------------------------------------- |
|
|
|
|
|
|
|
|
|
Generally speaking, rule (3) above is the simplest for users to specify. |
|
|
|
|
Authors of credential helpers should make an effort to assist their |
|
|
|
|
users by naming their program "git-credential-$NAME", and putting it in |
|
|
|
|
the `$PATH` or `$GIT_EXEC_PATH` during installation, which will allow a |
|
|
|
|
user to enable it with `git config credential.helper $NAME`. |
|
|
|
|
|
|
|
|
|
When a helper is executed, it will have one "operation" argument |
|
|
|
|
appended to its command line, which is one of: |
|
|
|
|
|
|
|
|
|
`get`:: |
|
|
|
|
|
|
|
|
|
Return a matching credential, if any exists. |
|
|
|
|
|
|
|
|
|
`store`:: |
|
|
|
|
|
|
|
|
|
Store the credential, if applicable to the helper. |
|
|
|
|
|
|
|
|
|
`erase`:: |
|
|
|
|
|
|
|
|
|
Remove a matching credential, if any, from the helper's storage. |
|
|
|
|
|
|
|
|
|
The details of the credential will be provided on the helper's stdin |
|
|
|
|
stream. The exact format is the same as the input/output format of the |
|
|
|
|
`git credential` plumbing command (see the section `INPUT/OUTPUT |
|
|
|
|
FORMAT` in linkgit:git-credential[1] for a detailed specification). |
|
|
|
|
|
|
|
|
|
For a `get` operation, the helper should produce a list of attributes on |
|
|
|
|
stdout in the same format (see linkgit:git-credential[1] for common |
|
|
|
|
attributes). A helper is free to produce a subset, or even no values at |
|
|
|
|
all if it has nothing useful to provide. Any provided attributes will |
|
|
|
|
overwrite those already known about by Git. If a helper outputs a |
|
|
|
|
`quit` attribute with a value of `true` or `1`, no further helpers will |
|
|
|
|
be consulted, nor will the user be prompted (if no credential has been |
|
|
|
|
provided, the operation will then fail). |
|
|
|
|
|
|
|
|
|
For a `store` or `erase` operation, the helper's output is ignored. |
|
|
|
|
If it fails to perform the requested operation, it may complain to |
|
|
|
|
stderr to inform the user. If it does not support the requested |
|
|
|
|
operation (e.g., a read-only store), it should silently ignore the |
|
|
|
|
request. |
|
|
|
|
|
|
|
|
|
If a helper receives any other operation, it should silently ignore the |
|
|
|
|
request. This leaves room for future operations to be added (older |
|
|
|
|
helpers will just ignore the new requests). |
|
|
|
|
|
|
|
|
|
GIT |
|
|
|
|
--- |
|
|
|
|