无法将更改推送到具有多个用户的远程存储库

时间:2014-12-31 18:20:52

标签: git github bitbucket

我已成功设置git并将我的项目推送到远程存储库。

我已经通过执行以下操作设置了我的全局user.nameuser.email

git config --global user.name 'user1'
git config --global user.email 'user1@example.com'

现在我有另一个我需要不同用户的存储库,所以我通过执行以下内容创建了另一个user特定于repo的存储:

git config user.name 'user2'
git config user.email 'user2@example.com'

当它尝试执行git push时,它不会让我推送我的代码并说

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

让我用全球用户推动我的变化,现在有什么不同?我是git的新手,我很难相处。

修改:我的ssh keys和我的github account分别为bitbucket account。也就是说,我希望ssh使用全局设置github repo,使用bit bucket特定设置repo repo

2 个答案:

答案 0 :(得分:1)

假设您已为这两个帐户分别设置了ssh密钥并链接到各自的帐户,以下解决了我的问题:

  1. 打开终端窗口。
  2. 编辑〜/ .ssh / config文件。 (如果您没有配置文件,请创建一个)
  3. 为每个标识组合添加别名,例如
  4. 关闭并保存文件。
  5. Host github.com
    HostName github.com 
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/personalid
    
    Host bitbucket.org
    HostName bitbucket.org
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/personalid
    

    加载ssh密钥

    1. 如果尚未按

      运行,请运行ssh-agent

      eval ssh-agent $ SHELL

      $ SHELL是登录shell的环境变量。

    2. ssh-add -l

    3. 如果ssh-add /path/to/yourKey
    4. 尚未加载新密钥,请将其加载

      完成!

      来源:Here

答案 1 :(得分:0)

更改git repo的用户名和用户电子邮件与ssh密钥无关,该密钥将用于推送到上游存储库。

默认情况下,该ssh密钥为~/.ssh/id_rsa.pub 该公钥(published on the BitBucket ssh user account page)是确定用户推送到BitBucket时的用户。

user.name / user.email配置仅用于显示推送到BitBucket存储库的提交的正确标识。它不必反映所述BitBucket仓库的实际所有者(由ssh公钥确定,或者由BitBucket用户名/密码用户帐户确定为https协议)。

如果你想使用不同的ssh公钥(注册到不同的BitBucket uset),那么,正如我在" How to change git ssh user for a remote push temporarily?"中提到的那样,你需要一个{{1}文件

~/.ssh/config

git remote set-url origin anotheruser:reponame 作为anotheruser文件中的条目,引用其他用户私有ssh密钥:

~/.ssh/config

请注意,您始终使用' Host anotheruser HostName bitbucket.org User git IdentityFile ~/.ssh/anotheruser '作为用于推送到BitBucket的ssh会话的用户 但是,由于您引用了正确的私有(和公共)ssh密钥,BitBucket将知道您是谁,更重要的是,如果您有权推送该回购。