How can I save username and password in Git?
I want to use a push and pull automatically in Git Extensions, Sourcetree or any other Git GUI without entering my username and password in a prompt, every time.
So how can I save my credentials in Git?
Attention: This method saves the credentials in plaintext on your PC's disk. Everyone on your computer can access it, e.g. malicious NPM modules.
Run
git config --global credential.helper store
then
git pull
provide a username and password and those details will then be remembered later. The credentials are stored in a file on the disk, with the disk permissions of "just user readable/writable" but still in plaintext.
If you want to change the password later
git pull
Will fail, because the password is incorrect, git then removes the offending user+password from the ~/.git-credentials
file, so now re-run
git pull
to provide a new password so it works as earlier.
You can use the git config
to enable credentials storage in Git.
git config --global credential.helper store
When running this command, the first time you pull or push from the remote repository, you'll get asked about the username and password.
Afterwards, for consequent communications with the remote repository you don't have to provide the username and password.
The storage format is a .git-credentials
file, stored in plaintext.
Also, you can use other helpers for the git config credential.helper
, namely memory cache:
git config credential.helper 'cache --timeout=<timeout>'
which takes an optional timeout parameter
, determining for how long the credentials will be kept in memory. Using the helper, the credentials will never touch the disk and will be erased after the specified timeout. The default
value is 900 seconds (15 minutes).
Warning: If you use this method, your Git account passwords will be saved in plaintext format, in the global .gitconfig file
, e.g in Linux it will be /home/[username]/.gitconfig
.
If this is undesirable to you, use an ssh key
for your accounts instead.
Recommended and secure method: SSH
Create an SSH GitHub key. Go to github.com → Settings → SSH and GPG keys → New SSH Key. Now save your private key to your computer.
Then, if the private key is saved as id_rsa in the ~/.ssh/ directory, we add it for authentication as such:
ssh-add -K ~/.ssh/id_rsa
A more secure method: Caching
We can use git-credential-cache to cache our username and password for a time period. Simply enter the following in your CLI (terminal or command prompt):
git config --global credential.helper cache
You can also set the timeout period (in seconds) as such:
git config --global credential.helper 'cache --timeout=3600'
An even less secure method
Git-credential-store may also be used, but it saves passwords in a plain text file on your disk as such:
git config credential.helper store
Turn on the credential helper so that Git will save your password in memory for some time:
In Terminal, enter the following:
# Set Git to use the credential memory cache
git config --global credential.helper cache
By default, Git will cache your password for 15 minutes.
To change the default password cache timeout, enter the following:
# Set the cache to timeout after 1 hour (setting is in seconds)
git config --global credential.helper 'cache --timeout=3600'
From GitHub Help.
You can edit the ~/.gitconfig
file to store your credentials:
sudo nano ~/.gitconfig
Which should already have
[user]
email = [email protected]
user = gitUSER
You should add the following at the bottom of this file.
[credential]
helper = store
The reason I recommend this option is because it is global and if at any point you need to remove the option you know where to go and change it.
Only use this option in you personal computer.
Then when you pull | clone| enter you Git password, in general, the password will be saved in ~/.git-credentials
in the format
https://gituser:[email protected]
Where DOMAIN.XXX could be github.com, bitbucket.org, or others
See the documentation.