8

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

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

$ 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喜欢这里建议的。推入我的工作回购仍然可以正常工作。当我输入git config user.name我的私人/工作存储库时,我会分别得到我的私人/工作用户名 - 应该是这样。

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

4

3 回答 3

6

我在这里详述的条件包括仅用于提交作者身份(user.name/email)。

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

这些可能缓存在凭证管理器中(如linux osx-keychain
检查输出:

git config credential.helper

如果可以,请在每个环境中使用 SSH 密钥,正如我在此处说明的那样:然后您可以轻松地为同一个远程存储库 (github.com) 维护不同的身份


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

于 2018-01-26T17:39:46.633 回答
1

我只是为我的 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

于 2018-11-07T18:34:25.707 回答
-3

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

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

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

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

于 2018-02-01T07:39:07.660 回答