On 05/01, Jonathan Nieder wrote: > Subject: credential doc: make multiple-helper behavior more prominent > > Git's configuration system works by reading multiple configuration > files in order, from general to specific: > > - first, the system configuration /etc/gitconfig > - then the user's configuration (~/.gitconfig or ~/.config/git/config) > - then the repository configuration (.git/config) > > For single-valued configuration items, the latest value wins. For > multi-valued configuration items, values accumulate in that order. > > For example, this allows setting a credential helper globally in > ~/.gitconfig that git will try to use in all repositories, regardless > of whether they additionally provide another helper. This is usually > a nice thing --- e.g. I can install helpers to use my OS keychain and > to cache credentials for a short period of time globally. > > Sometimes people want to be able to override an inherited setting. > For the credential.helper setting, this is done by setting the > configuration item to empty before giving it a new value. This is > already documented by the documentation is hard to find --- > git-config(1) says to look at gitcredentials(7) and the config > reference in gitcredentials(7) doesn't mention this issue. > > Move the documentation to the config reference to make it easier to > find. > > Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> > --- > Brandon Williams wrote: > > >> Noticed while trying to set credential.helper during a clone to use a > >> specific helper without inheriting from ~/.gitconfig and > >> /etc/gitconfig. That is, I ran > >> > >> git clone -c credential.helper= \ > >> -c credential.helper=myhelper \ > >> https://example.com/repo > >> > >> intending to produce the configuration > >> > >> [credential] > >> helper = > >> helper = myhelper > >> > >> Without this patch, the 'helper =' line is not included and the > >> credential helper from /etc/gitconfig gets used. > >> > >> Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> > >> --- > >> Thoughts? > > > > After reading this I'm still a little fuzzy on why the empty helper line > > is needed to avoid using the credential helper from /etc/gitconfig. > > See "git help credentials": > > If there are multiple instances of the credential.helper configuration > variable, each helper will be tried in turn, and may provide a > username, password, or nothing. Once Git has acquired both a username > and a password, no more helpers will be tried. > > If credential.helper is configured to the empty string, this resets the > helper list to empty (so you may override a helper set by a > lower-priority config file by configuring the empty-string helper, > followed by whatever set of helpers you would like). > > That's a bit obscure, though --- I didn't find it when I looked in "git > help config". How about this patch? > > Tested using 'make -C Documentation gitcredentials.7'. > > Documentation/gitcredentials.txt | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/Documentation/gitcredentials.txt b/Documentation/gitcredentials.txt > index f3a75d1ce1..f970196bc1 100644 > --- a/Documentation/gitcredentials.txt > +++ b/Documentation/gitcredentials.txt > @@ -101,16 +101,6 @@ $ git help credential-foo > $ git config --global credential.helper foo > ------------------------------------------- > > -If there are multiple instances of the `credential.helper` configuration > -variable, each helper will be tried in turn, and may provide a username, > -password, or nothing. Once Git has acquired both a username and a > -password, no more helpers will be tried. > - > -If `credential.helper` is configured to the empty string, this resets > -the helper list to empty (so you may override a helper set by a > -lower-priority config file by configuring the empty-string helper, > -followed by whatever set of helpers you would like). > - > > CREDENTIAL CONTEXTS > ------------------- > @@ -162,6 +152,16 @@ helper:: > shell (so, for example, setting this to `foo --option=bar` will execute > `git credential-foo --option=bar` via the shell. See the manual of > specific helpers for examples of their use. > ++ > +If there are multiple instances of the `credential.helper` configuration > +variable, each helper will be tried in turn, and may provide a username, > +password, or nothing. Once Git has acquired both a username and a > +password, no more helpers will be tried. > ++ > +If `credential.helper` is configured to the empty string, this resets > +the helper list to empty (so you may override a helper set by a > +lower-priority config file by configuring the empty-string helper, > +followed by whatever set of helpers you would like). Thanks, this clears up the confusion. > > username:: > > -- > 2.13.0.rc1.294.g07d810a77f > -- Brandon Williams