Can I hold git credentials in environment variables?
I'd like to create a very simple shell script, which will ultimately be called by another application, that updates a local git repository:
#!/bin/bash
cd $1
sudo git pull
When executing this I'm asked for credentials (I'm pulling from a private BitBucket repository).
Can I ( briefly) store credentials in environment variables?
#!/bin/bash
export GIT_USERNAME=<user>
export GIT_PASSWORD=<pass>
cd $1
sudo git pull
The above doesn't work. Would anything? I could programmatically modify the origin url but that seems a bit execessive.
I know that it's very old question but if you really need to pass username and password for HTTP basic authentication you can just set helper like this:
git config credential.helper '!f() { sleep 1; echo "username=${GIT_USER}"; echo "password=${GIT_PASSWORD}"; }; f'
UPDATE: I've added sleep 1
to the function. In some environments it may be probably needed due to race condition. I've got 2 virtual machines running Debian Jessie. They had the same architecture but different CPU and different number of cores. On one of these machines the helper was working fine without sleep
. On the other one it wasn't. After few hours of debugging I run strace
to see what's happening. And it magically started to work. strace
just made git a little bit slower.
You can set the username in the git config with:
git config credential.https://github.com.username $GIT_USER
Then you can set the GIT_ASKPASS
environment variable to a script that will provide the password:
export GIT_ASKPASS=/path/to/git_env_password.sh
The contents of git_env_password.sh
would be:
#!/bin/bash
echo $GIT_PASSWORD
N.B: This will store the username in the git config, so if you are not okay with that use another solution.
For more info consult the gitcredentials man page.