将多个 git 个人访问令牌 (PAT) 与凭据管理器一起使用
Posted
技术标签:
【中文标题】将多个 git 个人访问令牌 (PAT) 与凭据管理器一起使用【英文标题】:Using multiple git personal access tokens (PAT) with Credential Manager 【发布时间】:2022-01-21 14:10:27 【问题描述】:我按照 this answer 使用 GitCredentialManager,但我找不到如何使用多个个人访问令牌 (PAT) 的方法。
我有
Windows terminal
要点https://gist.github.com/lkeersmaekers/4884d047b3b90ccd697a4d7ec21be49d
dotvim
回购https://github.com/lkeersmaekers/dotvim
我创造了
Windows terminal
gist 的 PAT (创建 gists 范围)
dotvim
存储库的 PAT (访问公共存储库范围)
第一次推送Windows terminal
gist 时,git 按预期要求输入用户名/密码(=PAT),推送成功,我可以在 Windows 凭据管理器中看到凭据。
当随后推送 dotvim
存储库时,使用来自 Windows terminal
的存储凭据 (PAT),dotvim
推送失败。
我不确定这里的最佳做法是什么。
我可以创建一个具有足够访问权限的 PAT,而不是两个 PAT,但这样一来,我最终可能会得到一个 PAT,其中所有复选框都被选中,这似乎完全错误。 我不知道如何在 Windows 凭据管理器中拥有两个凭据,这将允许git push
以某种方式使用正确的凭据。
【问题讨论】:
我不明白您为什么会有“选中所有复选框的 PAT”。 @matt -me 也没有,因此我的问题是如何在一台计算机上使用两个 PAT 和 git 的凭证管理器。 Git 没有凭证管理器。你做。 Git 不做授权。那是在您和远程站点之间。您可以为 Git 提供对您的凭证管理器的引用,但这不是 Git 功能。 @matt - 注意,我已经编辑了我的问题。 【参考方案1】:您可以在这里采取几种不同的方法。一种是使用gist
和repo
范围创建单个令牌并普遍使用它。该令牌确实可以访问您的所有存储库,但如果您使用凭证助手,那么它会以加密方式存储,风险应该不会太大。
由于您实际上在这里使用了两个不同的域(github.com
和 gist.github.com
),因此您可以毫无问题地使用单独的令牌。令牌存储在域的范围内,因此这里没有冲突。只需在其各自的域上使用每个凭据。
如果您想为不同的存储库使用不同的令牌,您可以通过将credential.usehttppath
设置为 true 来实现。这也可以限定为特定的 URL 模式(包括通配符),以便它仅适用于 GitHub(例如,git config --global credential.https://github.com/.usehttppath true
。每个存储库将拥有自己的一组凭据,并且您可以存储尽可能多的令牌喜欢。但是,如果您有很多存储库,这可能很快就会变得不方便。
最后,如果您只想为公共和私人访问使用不同的令牌,您可以利用 GitHub 在您使用令牌时忽略用户名这一事实为 GitHub 执行此操作。因此,您可以通过在主机名前添加public@
来克隆公共存储库(例如,私有存储库的 https://public@github.com/git/git.git) and then using
private@`。Git 的凭证助手将存储单独的凭证对于这些假用户名,将使用相应的令牌。
【讨论】:
推送到gist.github.com
也使用github.com
凭据,但我将使用一个令牌来统治他们所有选项,以免使事情变得过于复杂,因此在实践中并不重要。如果您有兴趣,此(相关)信息会在以下位置跟踪输出:19:05:45.434878 ...GitCommandBase.cs:48 trace: [ExecuteAsync] **host=gist.github.com**
和 19:05:45.543991 ...\HostProvider.cs:126 trace: [GetCredentialAsync] Looking for existing credential in store with **service=https://github.com account**=...
GCM Core 可能会这样做,但 Git 凭证协议不会:它将它们视为单独的域。我认为在这种情况下,这是一个错误,您可能希望使用 wincred
作为助手。以上是关于将多个 git 个人访问令牌 (PAT) 与凭据管理器一起使用的主要内容,如果未能解决你的问题,请参考以下文章