如何在 Windows 版 Git Credential Manager 中存储每个存储库的凭据?

Jer*_*yal 17 git git-credential-manager

我有两个 GitHub 帐户(工作帐户和个人帐户),我希望将其凭据安全地存储在 Windows 10 中。

git config --global credential.helper manager仅设置一个用户名和密码,这在我的个人帐户的存储库和我的工作帐户的存储库之间发生冲突。这两个存储库都是使用 HTTPS 克隆的。

我想存储和访问不同的凭据,可能基于存储库用户名。是否可以?

我知道 SSH 是一个选项,但我想知道如何为 HTTPS 执行此操作。

Mic*_*ael 17

您可以通过三种不同的方式来执行此操作,具体取决于您的特定目标和情况:

  • 在 URL 中输入用户名。
  • 使能够useHttpPath
  • 在端口 上切换到 SSH 443

在 URL 中添加您的用户名

在 Bitbucket 上,您可以将用户名添加到远程的 HTTPS URL:

状态 远程网址
https://bitbucket.org/path/repo.git
https://JerryGoyal@bitbucket.org/path/repo.git

由于 URL 在技术上是不同的,因此如果需要,您可以将工作和个人分支添加为同一存储库的远程版本。该技术也适用于 GitHub,但其他存储库主机可能不支持它。

useHttpPath为主机设置

Git Credential Manager可以根据完整 URL 选择凭据,而不是通过主机名共享它们。

credential.useHttpPath

告诉 Git 在调用凭证提供程序时传递整个存储库 URL,而不仅仅是主机名。(此设置来自 Git 本身,而不是 GCM。)

默认为false.

如果您想对同一远程使用多个远程凭据,则第二种方法不起作用。但是,如果您对不同的遥控器有不同的 URL,那么即使来自单个本地存储库,它也应该可以正常工作。

远程主机上的所有存储库

这通常是最有用的模式useHttpPath。要设置所有 Bitbucket 远程 URL 的选项,请运行以下命令:

git config --global credential.https://bitbucket.org.useHttpPath true
Run Code Online (Sandbox Code Playgroud)

适用于 Windows 的 GituseHttpPath开箱即用即可启用 Azure Repos。etc/gitconfig您可以在安装位置亲自查看它。

[credential "https://dev.azure.com"]
    useHttpPath = true
Run Code Online (Sandbox Code Playgroud)

远程主机上只有一个存储库

正如rjmunro所指出的,您可以--global只使用当前存储库的路径。如果是这样,您也可以删除主机名:

git config credential.useHttpPath true
Run Code Online (Sandbox Code Playgroud)

然后,主机的存储库将默认使用共享主机凭据,但存储库将使用完整的 URL 路径来保存和加载其凭据。

您计算机上的所有存储库

从技术上讲,您可以强迫自己为每个远程存储库单独添加凭据。这是不必要的冗长,但这个答案显示了如何:

git config --global credential.useHttpPath true
Run Code Online (Sandbox Code Playgroud)

我真正想要的是ssh,但端口 22 被阻止

如果您只是因为防火墙问题超出您的控制范围而询问 HTTPS,您可能会对我针对支持端口 443 的某些 Git 提供商使用端口 443 的类似问题的回答感兴趣。


小智 -5

每个主机(或 URI)不能多个用户名。据我所知,就目前而言,SSH 是最直接的,可以做你想做的事情。

有关更多信息,您可以查看 VonC 对与您的问题非常相似的问题的回答。GitHub:Windows 上两个帐户的单独凭据