我可以在环境变量中持有git凭据吗?

时间:2011-12-16 15:58:56

标签: git environment-variables

我想创建一个非常简单的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,但这似乎有点过分。

5 个答案:

答案 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不使用凭据,它依赖于正在使用的传输。