我刚开始使用 Gitlab。我的工作场所最近从本地 Git 转移到基于云的 Gitlab 主机。我过去在本地使用 ssh 身份验证,因此无需处理
.git/config
或 ~/.gitconfig
中悬挂的凭据(我使用的是 Linux)。
如果我让
git
管理我的凭证/令牌,无论它使用什么默认值,这些凭证/令牌最终都会以明文形式存储在我的主目录中的~/.git-credentials
下或.git/config
文件中,这由于各种原因而存在问题.
我四处寻找,发现了Git Credential Manager Core,但是在安装它之后,如README所示,我不确定它是否正常工作,或者我误解了如何使用它。我运行这些命令来进行设置:
dpkg -i gcm-linux_amd64.2.0.785.deb
git-credential-manager-core configure
git config --global credential.credentialStore gpg
pass init <gpg-id>
我尝试使用个人访问令牌克隆基于云的存储库,但是当我克隆它时,
gpg
提示我输入密码,但令牌最终会出现在.git/config file
中。
$ git clone https://user-test-token:[email protected]/my.username/my-repo.git
$ cat .git/config
...
[remote "origin"]
url = https://user-test-token:[email protected]/my.username/my-repo.git
...
我做错了什么?
在 git clone 命令中,您将个人访问令牌插入到远程 URL 中。这是不安全的,并且会阻止 Git 调用任何配置的凭据助手。相反,您应该使用未经修饰的远程 URL 进行克隆。
接下来,Git Credential Manager 仅支持开箱即用的 gitlab.com (请参阅 GitLab 问题 #374172)。要与其他 GitLab 实例(例如
gitlab.example.com
)一起使用,请按照 https://github.com/git-ecosystem/git-credential-manager/blob/main/docs/gitlab.md 中的说明进行操作。
就其价值而言,您可能会发现使用git-credential-oauth更容易,它包含在许多Linux发行版中,包括Fedora、Debian和Ubuntu。
检查这是否是TTY 问题
如果您在无头/仅 TTY 环境中使用 gpg 凭证存储,则必须确保已使用适合终端的 PIN 输入程序(例如
或gpg-agent
pinentry-tty
)配置 GPG 代理 (pinentry-curses
).如果您没有通过 SSH 连接,或者没有设置
环境变量,则必须在运行 GCM 之前设置SSH_TTY
环境变量。GPG_TTY
最简单的方法是将以下内容添加到您的个人资料中(、~/.bashrc
等):~/.profile
export GPG_TTY=$(tty)