保留git-auth作为环境变量,而不是评估值



我正在尝试创建一个bash脚本,该脚本初始化服务器并克隆git存储库作为初始化的一部分。

安装用户将通过脚本将个人访问令牌(PAT(设置为环境变量$token进行克隆。我希望每个将代码拉入或推送到这个克隆存储库的后续用户都通过环境变量$TOKEN设置他们的PAT,而不是使用安装程序使用的原始PAT。

但是,当脚本克隆存储库时,gitconfig会存储$TOKEN的解释值,而不是变量$TOKEN,因此任何后续的拉/推都会使用原始安装程序的PAT。

即当我这样做时:

git clone https://oauth2:$TOKEN@gitlab.com/repo.git

gitconfig说:

[remote "origin"]
url = https://oauth2:xxx---actual-token---xxx@gitlab.com/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*

当我想说:

[remote "origin"]
url = https://oauth2:$TOKEN@gitlab.com/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*

我不知道如何以简单的方式强制每个用户每次使用他们的令牌。

有什么想法吗?感谢

您应该避免将令牌放入URL中,因为这会向其他用户公开并保存在配置文件中。相反,您可以让用户配置一个特殊的凭证助手来从环境中读取,如Git常见问题解答中所述(替换下面的author(:

$ git config credential.helper 
'!f() { echo username=author; echo "password=$TOKEN"; };f'

如果要将此操作作为克隆操作的一部分,可以使用-c参数来克隆:

$ git clone -c credential.helper= 
-c credential.helper='!f() { echo username=author; echo "password=$TOKEN"; };f' 
https://gitlab.com/repo.git

credential.helper的额外空值会导致删除任何现有的凭据助手,从而阻止将此令牌添加到用户的凭据助手中。如果您希望用户能够保存该指令,请删除该指令。

最新更新