我想创建一个非常简单的shell脚本,最终将由另一个应用程序调用,该脚本更新本地git存储库:
#!/bin/bash
cd $1
sudo git pull
执行此操作时,我要求提供凭据(我从私人BitBucket存储库中提取)。
我可以(简要地)将凭证存储在环境变量中吗?
#!/bin/bash
export GIT_USERNAME=<user>
export GIT_PASSWORD=<pass>
cd $1
sudo git pull
以上不起作用。什么事?我可以通过编程方式修改原始URL,但这似乎有点过分。
答案 0 :(得分:26)
我知道这是一个非常古老的问题,但如果你真的需要为HTTP基本身份验证传递用户名和密码,你可以像这样设置帮助:
git config credential.helper '!f() { sleep 1; echo "username=${GIT_USER}"; echo "password=${GIT_PASSWORD}"; }; f'
更新:我已将sleep 1
添加到该功能中。在某些环境中,由于竞争条件可能需要它。我有两台运行Debian Jessie的虚拟机。它们具有相同的体系结构,但CPU和核心数不同。在其中一台机器上,帮助程序在没有sleep
的情况下正常工作。另一方面,它不是。经过几个小时的调试后,我运行strace
来查看发生了什么。它神奇地开始工作。 strace
只是让git变慢了一点。
答案 1 :(得分:3)
您可以使用以下命令在git配置中设置用户名:
git config credential.https://github.com.username $GIT_USER
然后,您可以将GIT_ASKPASS
环境变量设置为将提供密码的脚本:
export GIT_ASKPASS=/path/to/git_env_password.sh
git_env_password.sh
的内容为:
#!/bin/bash
echo $GIT_PASSWORD
N.B:这会将用户名存储在git config中,因此,如果您对此不满意,请使用其他解决方案。
有关更多信息,请咨询gitcredentials man page。
答案 2 :(得分:3)
如果您只在脚本中运行一个 git 命令,您可以使用 -c 参数(向右滚动以查看 pull
命令)使配置更改极其本地化。
git -c credential.helper='!f() { sleep 1; echo "username=${GIT_USER}"; echo "password=${GIT_PASSWORD}"; }; f' pull
(我会评论 patryk's 答案,但在撰写本文时缺乏声誉点)
答案 3 :(得分:0)
是的,您可以使用git-credential-env
与env向您传递git Passwort /用户名GIT_USER=foo
GIT_PASS=bar
npm install -g git-credential-env
git config credential.helper "env --username=GIT_USER --password=GIT_PASS"
该项目中的Wiki说
You can accomplish the same behavior by using an inline bash function:
GIT_USER=foo
GIT_PASS=bar
git config credential.helper "!f() { echo \"username=${GIT_USER}\\npassword=${GIT_PASS}\"; }; f"
答案 4 :(得分:-9)
Git不使用凭据,它依赖于正在使用的传输。