Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
credentials: add "cache" helper
If you access repositories over smart-http using http
authentication, then it can be annoying to have git ask you
for your password repeatedly. We cache credentials in
memory, of course, but git is composed of many small
programs. Having to input your password for each one can be
frustrating.

This patch introduces a credential helper that will cache
passwords in memory for a short period of time.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Dec 12, 2011
1 parent a6fc9fd commit e277097
Show file tree
Hide file tree
Showing 12 changed files with 812 additions and 5 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -30,6 +30,8 @@
/git-commit-tree
/git-config
/git-count-objects
/git-credential-cache
/git-credential-cache--daemon
/git-cvsexportcommit
/git-cvsimport
/git-cvsserver
Expand Down
26 changes: 26 additions & 0 deletions Documentation/git-credential-cache--daemon.txt
@@ -0,0 +1,26 @@
git-credential-cache--daemon(1)
===============================

NAME
----
git-credential-cache--daemon - temporarily store user credentials in memory

SYNOPSIS
--------
[verse]
git credential-cache--daemon <socket>

DESCRIPTION
-----------

NOTE: You probably don't want to invoke this command yourself; it is
started automatically when you use linkgit:git-credential-cache[1].

This command listens on the Unix domain socket specified by `<socket>`
for `git-credential-cache` clients. Clients may store and retrieve
credentials. Each credential is held for a timeout specified by the
client; once no credentials are held, the daemon exits.

GIT
---
Part of the linkgit:git[1] suite
77 changes: 77 additions & 0 deletions Documentation/git-credential-cache.txt
@@ -0,0 +1,77 @@
git-credential-cache(1)
=======================

NAME
----
git-credential-cache - helper to temporarily store passwords in memory

SYNOPSIS
--------
-----------------------------
git config credential.helper 'cache [options]'
-----------------------------

DESCRIPTION
-----------

This command caches credentials in memory for use by future git
programs. The stored credentials never touch the disk, and are forgotten
after a configurable timeout. The cache is accessible over a Unix
domain socket, restricted to the current user by filesystem permissions.

You probably don't want to invoke this command directly; it is meant to
be used as a credential helper by other parts of git. See
linkgit:gitcredentials[7] or `EXAMPLES` below.

OPTIONS
-------

--timeout <seconds>::

Number of seconds to cache credentials (default: 900).

--socket <path>::

Use `<path>` to contact a running cache daemon (or start a new
cache daemon if one is not started). Defaults to
`~/.git-credential-cache/socket`. If your home directory is on a
network-mounted filesystem, you may need to change this to a
local filesystem.

CONTROLLING THE DAEMON
----------------------

If you would like the daemon to exit early, forgetting all cached
credentials before their timeout, you can issue an `exit` action:

--------------------------------------
git credential-cache exit
--------------------------------------

EXAMPLES
--------

The point of this helper is to reduce the number of times you must type
your username or password. For example:

------------------------------------
$ git config credential.helper cache
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

[work for 5 more minutes]
$ git push http://example.com/repo.git
[your credentials are used automatically]
------------------------------------

You can provide options via the credential.helper configuration
variable (this example drops the cache time to 5 minutes):

-------------------------------------------------------
$ git config credential.helper 'cache --timeout=300'
-------------------------------------------------------

GIT
---
Part of the linkgit:git[1] suite
17 changes: 12 additions & 5 deletions Documentation/gitcredentials.txt
Expand Up @@ -63,11 +63,18 @@ Credential helpers, on the other hand, are external programs from which git can
request both usernames and passwords; they typically interface with secure
storage provided by the OS or other programs.

To use a helper, you must first select one to use. Git does not yet
include any credential helpers, but you may have third-party helpers
installed; search for `credential-*` in the output of `git help -a`, and
consult the documentation of individual helpers. Once you have selected
a helper, you can tell git to use it by putting its name into the
To use a helper, you must first select one to use. Git currently
includes the following helpers:

cache::

Cache credentials in memory for a short period of time. See
linkgit:git-credential-cache[1] for details.

You may also have third-party helpers installed; search for
`credential-*` in the output of `git help -a`, and consult the
documentation of individual helpers. Once you have selected a helper,
you can tell git to use it by putting its name into the
credential.helper variable.

1. Find a helper.
Expand Down
3 changes: 3 additions & 0 deletions Makefile
Expand Up @@ -427,6 +427,8 @@ PROGRAM_OBJS += show-index.o
PROGRAM_OBJS += upload-pack.o
PROGRAM_OBJS += http-backend.o
PROGRAM_OBJS += sh-i18n--envsubst.o
PROGRAM_OBJS += credential-cache.o
PROGRAM_OBJS += credential-cache--daemon.o

PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))

Expand Down Expand Up @@ -699,6 +701,7 @@ LIB_OBJS += transport-helper.o
LIB_OBJS += tree-diff.o
LIB_OBJS += tree.o
LIB_OBJS += tree-walk.o
LIB_OBJS += unix-socket.o
LIB_OBJS += unpack-trees.o
LIB_OBJS += url.o
LIB_OBJS += usage.o
Expand Down

0 comments on commit e277097

Please sign in to comment.