6

我在 github / bitbucket 上有多个帐户,每个帐户都有一个唯一的私钥-公钥对。当我需要推送到由不同帐户创建的存储库时会出现问题,除非我推送到默认帐户(我第一次创建的帐户),否则我几乎肯定会被拒绝访问。

有没有办法在推送之前切换到不同的凭据?我在 Macintosh 机器上使用 Source Tree。我不想~/.ssh/id_rsa在需要推送时手动重命名。

非常感谢您的意见!

4

3 回答 3

6

您可以~/.ssh/config按照此处的说明使用:

https://confluence.atlassian.com/pages/viewpage.action?pageId=271943168

Host workdid
 HostName bitbucket.org
 IdentityFile ~/.ssh/workdid
Host personalid
 HostName bitbucket.org
 IdentityFile ~/.ssh/personalid

否则,如果您只是想在进行推送之前“切换帐户”,则可以使用ssh-add. 打开Terminal.app,运行ssh-agent并运行ssh-add ~/.ssh/path_to_your_account_id_rsa,然后执行推送。推送后,您可以通过运行切换回默认帐户:ssh-add ~/.ssh/id_rsa

希望能帮助到你!

于 2013-09-10T17:13:41.030 回答
4

另一方面,如果您通常使用一个默认帐户来拉/推,并且您偶尔会将更改推送到您的其他帐户,您可以添加一个远程引用https其他帐户的 url 到您的.git/config文件,尽管这样您每次都必须输入您的 github 密码,并且只有默认的 github 帐户(对应于启用的密钥)将使用 ssh 密钥。

类似于以下内容

[remote "origin"]
    url = git@github.org:account1/repository.git 
    #This one uses the default ssh keys

[remote "account2"]
    url = https://github.com/account2/repository.git 
    #This will need password while pushing/pulling
[remote "account3"]
    url = https://github.com/account3/repository.git 
    #This will need password while pushing/pulling

然后对于正常操作,您可以使用 ssh 键推/拉

git pull origin branch_name
git push origin branch_name

而对于推送到其他帐户仓库,您可以https使用密码推送

git push account2 branch_name
git push account3 branch_name
于 2013-09-10T20:16:39.913 回答
3

对于 BitBucket,我发现最适合我的方法是 a) 将密钥添加到 my ~/.ssh/config,以及 b) 更改我的项目的本地配置。

例如:

# ~/.ssh/config
Host work
  HostName bitbucket.org
  IdentityFile ~/.ssh/work

Host personal
  HostName bitbucket.org
  IdentityFile ~/.ssh/personal

然后在我项目的本地 git config 中,我将远程 URL 的主机部分更改为适当的主机。例如,在以下文件中:

# ~/repos/myworkproject/.git/config
# or you can access this file by going into the repo and running `git config -e`
...snip...
[remote "origin"]
  fetch = ...
  url = git@bitbucket.org:mybitbucketusername/myworkproject.git

将 url 行更改为:

url = git@work:mybitbucketusername/myworkproject.git
于 2014-03-19T14:47:51.770 回答