GitHub:Windows 上两个帐户的单独凭据

Posted

技术标签:

【中文标题】GitHub:Windows 上两个帐户的单独凭据【英文标题】:GitHub: Separate credentials for two accounts on Windows 【发布时间】:2018-07-03 09:00:43 【问题描述】:

我最近创建了第二个 GitHub 帐户,将我的工作和私人项目分开(之前,我只有工作帐户)。 我将 https 与 Windows 凭据存储结合使用。为了自动选择正确的帐户,我将我的私人帐户信息存储在 ~/.gitconfig 中,并将工作帐户信息存储在 ~/work/.gitconfig 中,如建议的 here。

不幸的是,当我尝试在我的私有存储库中推送更改时,我收到以下错误:

$ git push
remote: Permission to privateuser/privaterepo.git denied to workuser.
fatal: unable to access 'https://privateuser@github.com/privateuser/privaterepo.git/': The requested URL returned error: 403

我将远程 URL 设置为 git remote set-url origin https://privateuser@github.com/privateuser/privaterepo.git,就像建议的 here 一样。 推入我的工作回购仍然可以正常工作。 当我在我的私人/工作存储库中输入git config user.name 时,我会分别得到我的私人/工作用户名 - 应该是这样。

新的私有仓库有什么问题?当我尝试推送到我的私人仓库时,为什么 git 仍然认为我是 workuser?它是否与我用来存储工作凭据的 Windows 凭据存储有关?它从来没有要求我的私人帐户的密码...

【问题讨论】:

如何使用git config credential.authority Basicgit config credential.useHttpPath true 【参考方案1】:

条件包括 I detail here 仅用于提交作者身份(用户名/电子邮件)。

这与身份验证无关(凭据:用户名/密码)

这些可能缓存在 credential manager 中(如 linux osx-keychain) 检查输出:

git config credential.helper

如果可以,请在每个环境中使用 SSH 密钥,因为我 illustrate there:那么您可以轻松地为同一个远程仓库 (github.com) 维护不同的身份


注意:与Git for Windows 一起安装的 GCM (Git Credential Manager) 不支持 as stated in issue 363,每个 Uri 支持多个用户。

【讨论】:

是的,Windows 凭据管理器存储 GitHub 凭据,但似乎只能处理一个帐户的凭据。我尝试手动编辑和添加凭据不起作用。我现在正在使用 ssh 使用您的答案,即使设置它和调整所有本地存储库的远程 URL 需要一些开销。因此,如果还有其他更简单的答案,我们仍然欢迎。 @CGFoX 是的,我已经完成了指向所使用的确切管理器的答案,事实上它还不支持每个 URI 多个用户。 由于似乎没有使用 https 的正确答案并且您的 ssh 解决方案相当简单,因此您将获得赏金;)【参考方案2】:

我刚刚为我的 Jenkins 设置了一个多凭据设置,它可能适用于您正在做的事情。

对于我们的 Jenkins 用户,我们将我们的配置推送到 AWS CodeCommit 以备份服务器。我们还需要能够使用 mvn release 插件,这需要能够推送到我们的 Github 存储库。我们的 jenkins 实例也在阻止传出 SSH 的子网中,因此我们必须使用 HTTPS。

因此,我们需要两组凭据。还要注意的是,我们的 Github 组织需要 MFA,所以密码实际上是个人访问令牌。

# /var/lib/jenkins/.gitconfig
[user]
  name = Jenkins
  email = jenkins@domain.io
[credential]
  helper = !aws --profile default codecommit credential-helper $@
  UseHttpPath = true
[credential "https://github.com"]
  helper = store

# /var/lib/jenkins/.git-credentials
https://username:password@github.com/SomeOrg/some-repo

另外一点是,由于您的存储库/组织似乎都在 Github 上,以下是 git 文档中可能适用于您的一些附加点:

useHttpPath - 默认情况下,Git 不认为 http URL 的“路径”组件值得通过外部助手进行匹配。这意味着为https://example.com/foo.git 存储的凭据也将用于https://example.com/bar.git。如果您确实想区分这些情况,请将此选项设置为 true。

https://git-scm.com/docs/gitcredentials

【讨论】:

【参考方案3】:

您只能通过键入以下内容为该存储库设置用户:

git config --local user.name 'Full Name'

git config --local user.email 'your@mail.com'

这不会影响您的其他存储库。

【讨论】:

不,用户名/电子邮件设置与身份验证无关

以上是关于GitHub:Windows 上两个帐户的单独凭据的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 Windows 凭据管理器的情况下更改我的 git 帐户凭据

如何在git中切换GitHub帐号

如何通过 Windows Git 凭据管理器使用多个 Git 帐户

git clone时 Repository not found Windows下及Linux下

具有特定 AD 帐户凭据的连接字符串

怎么显示windows凭据网络密码?