Skip to content
  • Paul Tan's avatar
    git-credential-store: support XDG_CONFIG_HOME · 44b22898
    Paul Tan authored and Junio C Hamano's avatar Junio C Hamano committed
    Add $XDG_CONFIG_HOME/git/credentials to the default credential search
    path of git-credential-store. This allows git-credential-store to
    support user-specific configuration files in accordance with the XDG
    base directory specification[1].
    
    [1] http://standards.freedesktop.org/basedir-spec/basedir-spec-0.7.html
    
    
    
    ~/.git-credentials has a higher precedence than
    $XDG_CONFIG_HOME/git/credentials when looking up credentials.  This
    means that if any duplicate matching credentials are found in the xdg
    file (due to ~/.git-credentials being updated by old versions of git or
    outdated tools), they will not be used at all. This is to give the user
    some leeway in switching to old versions of git while keeping the xdg
    directory. This is consistent with the behavior of git-config.
    
    However, the higher precedence of ~/.git-credentials means that as long
    as ~/.git-credentials exist, all credentials will be written to the
    ~/.git-credentials file even if the user has an xdg file as having a
    ~/.git-credentials file indicates that the user wants to preserve
    backwards-compatibility. This is also consistent with the behavior of
    git-config.
    
    To make this precedence explicit in docs/git-credential-store, add a new
    section FILES that lists out the credential file paths in their order of
    precedence, and explain how the ordering affects the lookup, storage and
    erase operations.
    
    Also, update the documentation for --file to briefly explain the
    operations on multiple files if the --file option is not provided.
    
    Since the xdg file will not be used unless it actually exists, to
    prevent the situation where some credentials are present in the xdg file
    while some are present in the home file, users are recommended to not
    create the xdg file if they require compatibility with old versions of
    git or outdated tools. Note, though, that "erase" can be used to
    explicitly erase matching credentials from all files.
    
    Helped-by: default avatarMatthieu Moy <Matthieu.Moy@grenoble-inp.fr>
    Helped-by: default avatarJunio C Hamano <gitster@pobox.com>
    Helped-by: default avatarJeff King <peff@peff.net>
    Helped-by: default avatarEric Sunshine <sunshine@sunshineco.com>
    Signed-off-by: default avatarPaul Tan <pyokagan@gmail.com>
    Reviewed-by: default avatarMatthieu Moy <Matthieu.Moy@imag.fr>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    44b22898