我可以在环境变量中保存git凭据吗?

问题描述:

我想创建一个非常简单的shell脚本,这将最终被其他应用程序调用,更新一个本地的Git仓库:我可以在环境变量中保存git凭据吗?

#!/bin/bash 

cd $1 
sudo git pull 

当执行这个我问凭据(我从私人BitBucket存储库中拉出)。

我可以(简要)将凭证存储在环境变量中吗?

#!/bin/bash 

export GIT_USERNAME=<user> 
export GIT_PASSWORD=<pass> 

cd $1 
sudo git pull 

上述不起作用。会有什么?我可以通过编程修改原始网址,但似乎有点过分。

+4

git不使用凭据,它依赖于正在使用的传输。你使用SSH的Git?如果是这样,你应该看看SSH密钥。 – 2011-12-16 16:01:13

Git不使用凭据,它依赖于正在使用的传输。

我知道这是很老的问题,但如果你真的需要通过用户名和密码的HTTP基本认证,你可以只设置助手这样的:

git config credential.helper '!f() { sleep 1; echo "username=${GIT_USER}\npassword=${GIT_PASSWORD}"; }; f' 

更新:我已经添加sleep 1的功能。在某些环境中,由于竞态条件可能需要它。我有两台运行Debian Jessie的虚拟机。它们具有相同的体系结构,但CPU和CPU数量不同。在其中一台机器上,帮助器工作正常,没有sleep。另一方面则不是。经过几个小时的调试后,我运行strace以查看发生了什么。它神奇地开始工作。 strace只是让git慢了一点。

+0

非常感谢!适用于基于HTTP的推送!对于SSH,我也会为密钥投票。 – 2017-04-21 12:27:13