问题
Git 定义了两种带有验证机制的远程模式:ssh 和 https。通过 tools.gitlibs,我们支持通过 ssh-agent 连接的 ssh 验证。虽然 git+https 验证在野外很常见,但目前不支持。
解决方案
目前,请使用 ssh 的 git。
背景信息
git 的主线实现支持一个名为(链接:http://man7.org/linux/man-pages/man1/git-credential.1.html text: "credential helpers")的机制,它从灵魂数据库请求认证。这些辅助灵魂数据库是使用包含认证请求(通过 stdin 传入)的映射的可执行文件调用的,它们返回认证信息(通过 stdout)
protocol=https host=example.com path=foo.git
这种扩展机制允许与 1Password、LastPass 和 Hashicorp Vault 等集成。默认情况下 {{git config --get 'credential.helper'}} 在 macOS 上返回 {{osxkeychain}},在 Linux 上返回 {{cache}}。{{git}} 通过绝对路径 + 参数或类似方式解析认证助手:
bq. 证书助手开发者应尽力帮助用户,为自己程序命名 "git-credential-$NAME",并在安装过程中将其放置于 $PATH 或 $GIT_EXEC_PATH
git 还支持通过在配置中查找 URL 来配置默认的用户名或证书助手。
工具.gitlibs 使用的 JGit 支持一个名为(链接:http://download.eclipse.org/jgit/site/4.10.0.201712302008-r/apidocs/org/eclipse/jgit/transport/CredentialsProvider.html text: CredentialProvider)的概念,有多个具体实现(AwtCredentialsProvider、ChainingCredentialsProvider、ConsoleCredentialsProvider、NetRCCredentialsProvider、UsernamePasswordCredentialsProvider),但没有一个与主线 git 的方式相同。
GitHub 目前更倾向于使用 https 而非 ssh 来访问 git(尽管这在前历史上已经反复变换)。
不可行方案
- 将证书放在 deps.edn 中