Jon*_*ram 17 git environment-variables
我想创建一个非常简单的shell脚本,最终将由另一个应用程序调用,它更新本地git存储库:
#!/bin/bash
cd $1
sudo git pull
Run Code Online (Sandbox Code Playgroud)
执行此操作时,我要求提供凭据(我从私有BitBucket存储库中提取).
我可以(简要地)将凭证存储在环境变量中吗?
#!/bin/bash
export GIT_USERNAME=<user>
export GIT_PASSWORD=<pass>
cd $1
sudo git pull
Run Code Online (Sandbox Code Playgroud)
以上不起作用.什么事?我可以通过编程方式修改原始URL,但这似乎有点过分.
Pat*_*rek 34
我知道这是一个非常古老的问题但是如果你真的需要为HTTP基本身份验证传递用户名和密码,你可以像这样设置帮助:
git config credential.helper '!f() { sleep 1; echo "username=${GIT_USER}"; echo "password=${GIT_PASSWORD}"; }; f'
Run Code Online (Sandbox Code Playgroud)
更新:我已添加sleep 1到该功能.在某些环境中,由于竞争条件,可能需要它.我有两台运行Debian Jessie的虚拟机.它们具有相同的体系结构,但CPU和核心数不同.在其中一台机器上,助手没有正常工作sleep.另一方面却没有.经过几个小时的调试后,我跑去strace看看发生了什么.它神奇地开始工作.strace刚刚让git变慢了一点.
Hum*_*eer 17
如果您在脚本中只运行一个 git 命令,则可以使用 -c 参数使配置更改高度本地化(向右滚动以查看该pull命令)。
git -c credential.helper='!f() { sleep 1; echo "username=${GIT_USER}"; echo "password=${GIT_PASSWORD}"; }; f' pull
Run Code Online (Sandbox Code Playgroud)
(我会对帕特里克的回答发表评论,但在撰写本文时缺乏声誉点)
您可以使用以下命令在git config中设置用户名:
git config credential.https://github.com.username $GIT_USER
Run Code Online (Sandbox Code Playgroud)
然后,您可以将GIT_ASKPASS环境变量设置为将提供密码的脚本:
export GIT_ASKPASS=/path/to/git_env_password.sh
Run Code Online (Sandbox Code Playgroud)
的内容为git_env_password.sh:
#!/bin/bash
echo $GIT_PASSWORD
Run Code Online (Sandbox Code Playgroud)
注意:这会将用户名存储在git config中,因此,如果您对此不满意,请使用其他解决方案。
有关更多信息,请参考gitcredentials手册页。
是的,你可以使用git-credential-env将 git Passwort/Username 与 env 传递给你
GIT_USER=foo
GIT_PASS=bar
npm install -g git-credential-env
git config credential.helper "env --username=GIT_USER --password=GIT_PASS"
Run Code Online (Sandbox Code Playgroud)
这个项目中的维基说
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"
Run Code Online (Sandbox Code Playgroud)