在这篇文章中:

做过很多遍了,却总是记不住,这回从头来描述一下。

介绍

所谓多个git账号,可能有两种情况:

  • 我有多个github的账号,不同的账号对应不同的repo,需要push的时候自动区分账号
  • 我有多个git的账号,有的是github的,有的是bitbucket的,有的是单位的gitlab的,不同账号对应不同的repo,需要push的时候自动区分账号

这两种情况的处理方法是一样的,分下面几步走:

处理

  • 先假设我有两个账号,一个是github上的,一个是公司gitlab上面的。先为不同的账号生成不同的ssh-key ssh-keygen -t rsa -f ~/.ssh/id_rsa_work -c xxx@gmail.com 然后根据提示连续回车即可在~/.ssh目录下得到id_rsa_work和id_rsa_work.pub两个文件,id_rsa_work.pub文件里存放的就是我们要使用的key ssh-keygen -t rsa -f ~/.ssh/id_rsa_github -c xxx@gmail.com 然后根据提示连续回车即可在~/.ssh目录下得到id_rsa_github和id_rsa_github.pub两个文件,id_rsa_gthub.pub文件里存放的就是我们要使用的key
  • 把id_rsa_xxx.pub中的key添加到github或gitlab上,这一步在github或gitlab上都有帮助,不再赘述
  • 编辑 ~/.ssh/config,设定不同的git 服务器对应不同的key

1 2 3 4 5 6 7 8 9 10 11 12

# Default github user(first@mail.com),注意User项直接填git,不用填在github的用户名 Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa_github # second user(second@mail.com) # 建一个gitlab别名,新建的帐号使用这个别名做克隆和更新 Host 172.16.11.11 HostName 172.16.11.11 User work IdentityFile ~/.ssh/id_rsa_work

编辑完成后可以使用命令 ssh -vT git@github.com 看看是不是采用了正确的id_rsa_github.pub文件

这样每次push的时候系统就会根据不同的仓库地址使用不同的账号提交了

  • 从上面一步可以看到,ssh区分账号,其实靠的是HostName这个字段,因此如果在github上有多个账号,很容易的可以把不同的账号映射到不同的HostName上就可以了。比如我有A和B两个账号, 先按照步骤一生成不同的key文件,再修改~/.ssh/config 内容应该是这样的。

1 2 3 4 5 6 7 8 9 10 11 12

# Default github user(A@mail.com),注意User项直接填git,不用填在github的用户名 Host A.github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa_github_A # second user(B@mail.com) # 建一个gitlab别名,新建的帐号使用这个别名做克隆和更新 Host A.github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa_github_B

同时你的github的repo ssh url就要做相应的修改了,比如根据上面的配置,原连接地址是:

git@github.com:testA/gopkg.git

那么根据上面的配置,就要把github.com换成A.github.com, 那么ssh解析的时候就会自动把testA.github.com 转换为 github.com,修改后就是

git@A.github.com:testA/gopkg.git

直接更改 repo/.git/config 里面的url即可

这样每次push的时候系统就会根据不同的仓库地址使用不同的账号提交了

一些题外话

我有一个repo,想要同时push到不同的仓库该如何设置?

很简单, 直接更改 repo/.git/config 里面的url即可,把里面对应tag下的url增加一个就可以了。例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

[remote "GitHub"] url = git@github.com:elliottcable/Paws.o.git fetch = +refs/heads/*:refs/remotes/GitHub/* [branch "Master"] remote = GitHub merge = refs/heads/Master [remote "Codaset"] url = git@codaset.com:elliottcable/paws-o.git fetch = +refs/heads/*:refs/remotes/Codaset/* [remote "Paws"] url = git@github.com:Paws/Paws.o.git fetch = +refs/heads/*:refs/remotes/Paws/* [remote "Origin"] url = git@github.com:Paws/Paws.o.git url = git@codaset.com:elliottcable/paws-o.git

上面这个立即就是有4个远端仓库,不同的tag表示不同的远端仓库,最后的Origin标签写法表示默认push到github和codaset这两个远端仓库去。当然,你可以自己随意定制tag和url

我有一个github的repo,clone没有问题,push的时候总是报错:error: The requested URL returned error: 403 while accessing xxx

这个问题也困扰了我一段时间,后来发现修改 repo/.git/config 里面的url,把https地址替换为ssh就好了。

例如

url=https://MichaelDrogalis@github.com/derekerdmann/lunch_call.git

替换为

url=ssh://git@github.com/derekerdmann/lunch_call.git

本机添加多个git仓库账号

 

我们可能会需要在一台电脑上以不同的github账户去使用git,这时就需要去解决如何管理本机上的多个ssh key的问题了。

生成新ssh key

如果我们电脑上已经存在了一个ssh key,那么我们需要在我们电脑上生成第二个你想在本电脑上使用的id_rsa,使用命令:ssh-keygen -t rsa -C "你的github注册邮箱"

下图红色标注部分会提示你把新生成的id_rsa存放到哪里,此处默认会存放在c盘的用户名下的.ssh文件夹下(即你第一个github用户ssh key存放的目录),因此我们需要输入路径/c/Users/DodoMonster/.ssh(注意此路径是你的系统盘下用户目录安放ssh密钥的目录,请使用自己电脑上相对应的目录),最后我以“id_rsa_me”重新命名了ssh key防止默认与已有的ssh key重复。

在输入了路径后,会提示你输入提交项目时输入的验证密码,不输则表示不用密码,这是为了防止别人随便在你的项目上push东西,所以最好还是输入以下你的密码。回车,再重复输入确认回车即可。

添加新ssh key

默认SSH只会读取id_rsa,所以为了让SSH识别新的私钥,需要将其添加到SSH agent
使用命令:ssh-add ~/.ssh/id_rsa_me

如果报错:Could not open a connection to your authentication agent.无法连接到ssh agent
可执行ssh-agent bash命令后再执行ssh-add

然后将公钥添加到git账号中 https://github.com/settings/keys

配置config文件

查看.ssh文件中是否存在config文件

如果已存在则直接编辑config文件,命令:vim config #这是linux的命令,进入了vim界面后按a或i或A或I进入编辑模式,编辑完成后按esc键输入:wq 保存文件退出

如果不存在则需要创建config文件,命令:touch config,再对config文件进行编辑

对config文件进行配置填写:

#Default 第一个账号(123456@xxxx.com)

Host default
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_me #second 第二个账号(38894403@xxxx.com) Host zc
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa

其中Host 后的名字可以随意方便自己记忆,但HostName必须为github.com(或者其它git地址)。

测试是否配置成功

使用命令:

ssh -T git@zc

出现如图的欢迎语则为配置成功。

注意:配置完成后,在连接Host不是github.com的github仓库时,远程库的地址要对应地做一些修改:

而并非原来的git@github.com:38894403/react.git

这样每次连接都会使用id_rsa_me与服务器进行连接。

配置至此,大功告成!

 

添加SSH密钥到GitHub

 

$ clip < ~/.ssh/id_rsa.pub
bash: /c/Users/UsersName/.ssh/id_rsa.pub: No such file or directory

【转】Generating SSH keys 生成 SSH 密钥

Step 1、检查本机现有的SSH密钥

检查~/.ssh看看是否有名为d_rsa.pub  和id_dsa.pub的2个文件。如果你什么都没得到这些文件,转到  步骤2 ;否则,请跳到  第3步。

打开你的Git Bash,输入:

$ ls -al ~/.ssh

Step 2、创建一个新的SSH密钥

注意期间“输入密码(空没有密码):再次输入密码]:[键入密码]#再次输入相同的密码”,如下:

“Enter passphrase (empty for no passphrase): [Type a passphrase] # Enter same passphrase again:”
可不管,直接一路ENTER。
$ ssh-keygen -t rsa -C "注册Github用的邮箱"
$ ssh-keygen -t rsa -C "注册Github用的邮箱"

Generating public/private rsa key pair.

Enter file in which to save the key (/c/Users/UsersName/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/UsersName/.ssh/id_rsa.
Your public key has been saved in /c/Users/UsersName/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:rwuerTS5wjzt86GtvvVt0jwm5nquIJWpdXt+kw2exYU 注册Github用的邮箱
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| . |
| o E .|
| = S . . |
| + o o . o |
| oo.* + o+ * |
| =+o@ *=.% . |
| =@*OO=*.o |
+----[SHA256]-----+

现在你的公钥已经保存在/c/Users/you/.ssh/id_rsa.pub中。

如果以上“ssh-keygen 生成一个公钥私钥”的过程中选择设置了密码,及可通过“ssh-add”来实现ssh免密码登陆。(详情可参照“ssh-agent用法”)

添加新的SSh密钥到ssh-keyen中:

$ eval "$ (ssh-agent -s)"  #ssh-agent启动之后,如果通过公钥做身份验证,只需第一次输入密码,以后ssh-agent会帮你自动输入。

Step 3、将你的SSH key添加到GitHub

运行以下代码复制id_rsa.pub到剪切板:

$ clip < ~/.ssh/id_rsa.pub

手动复制 ~/.ssh文件夹下的id_rsa.pub。

现在将其添加到GitHub上(参考GitHub官网教程“Adding a new SSH key to your GitHub account”):

  1. 在页面的用户栏的右上角,单击  Settings ;
  2. 在左侧边栏点击 SSH and GPG keys.
  3. 点击   New SSH key ;
  4. 在Title标题区域中,为新的SSH密钥添加一个描述性标签。例如,如果您使用的是个人的PC,您可以调用这个关键的“Personal MacBook Air”;
  5. 粘贴您的钥匙插入 Key 区域中;
  6. 点击  Add SSH key ;
  7. 确认通过输入操作GitHub的密码。

Step 4、测试SSH key是否成功的添加到GitHub

$ ssh -T git@github.com # 用 ssh 连接 github
$ ssh -T git@github.com

中途会有如下提示,选择yes即可:

Are you sure you want to continue connecting (yes/no)? yes

 

 
 
 
 

多个git账号之间的切换的更多相关文章

  1. 如何切换本地的GIT账号

    如何切换本地的GIT账号 1.为什么登陆第一次Git之后,就不用登陆了呢? 因为电脑已经将你的登陆凭据给保存起来了. 这也正是你不知道如何切换账号的原因. 2.在哪里能看已经保存的登陆凭证呢?并能够切 ...

  2. 配置多个 git 账号的 ssh密钥

    背景 在工作中,我们通常会以 ssh 的方式配置公司的 git 账号,但是平时也会使用 github 管理自己的项目.因此,我们需要为自己的 github 创建一个新的 git 账号,这就需要生成新的 ...

  3. 配置多个git账号的ssh密钥

    博客改版,请直接访问新版文章:https://www.cnblogs.com/xiaoxi666/p/9975981.html 背景 我们在工作中会以 ssh 的方式配置公司的 git 账号,但是平时 ...

  4.  (转)windows一台电脑添加多个git账号

    版权声明:技术总结来自互联网,书籍,以及工作积累.如果觉得我的总结有帮助,欢迎分享. https://blog.csdn.net/qq1332479771/article/details/701496 ...

  5. windows系统一台电脑先后添加多个git账号

    概述 电脑上已经配置了github的ssh连接.现在又有一个不同的git账户,也就是要在一台电脑上配置两个git账号. 下面记录一下我配置的方法. 一.取消git全局配置 之前配置github的时候, ...

  6. git账号失效问题解决

    linux开发机上,使用某人账号,进行代码同步.该员工离职,导致该git账号不可用. 此时需要完成3步配置: 1.生成新的公私秘钥:在~/.ssh/config中把私钥文件路径 append到文件末尾 ...

  7. 版本控制git之二 分支 切换分支 创建分支 合并 删除

      版本控制git之二 分支   有人把 Git 的分支模型称为它的`‘必杀技特性’',也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出. 为何 Git 的分支模型如此出众呢? Git 处 ...

  8. Windows下配置多个Git账号

    1. 为什么会用多个git账号? 不同git账号对应不同代码托管平台,如:github.bitbucket.gitlab.gitee(码云)等 2个GitHub账号,用于测试(最近需求,之前没研究过g ...

  9. 如何做到在虚拟数据库和真实数据库之间自由切换?【低调赠送:QQ高仿版GG 4.4 最新源码】

    记得以前在公司上班时,有时候白天的活没干完,我就会把工作带回家晚上加班继续做.但是,我们开发用的数据库是部署在公司局网内部的一台服务器上的,在家里是肯定连不上这台机器的.在家里没有数据库,服务端就跑不 ...

随机推荐

  1. Android使用DrawerLayout仿qq6.6版本侧滑效果

      一讲到侧滑菜单,我相信大家都会想到一个开源控件SlidingMenu,在google还没有出来DrawerLayout的时候几乎都是使用Slidingmenu来实现侧滑效果,可以说是效果很不错,自 ...

  2. Python监控Windows下的文件变化

    windows下监控文件系统的变化.用python非常方便.实例代码例如以下,非常easy.也不多说了. import os import win32file import win32con ACTI ...

  3. spring sessionFactory 属性配置详解,applicationContext中各种属性详解

    1.Bean的id为sessionFactory,对应的类为AnnotationSessionFactory,即采用注解的形式实现hibernate. 2.hibernateProperties,配置 ...

  4. hive sql 修改列名

    ALTER TABLE dev.dev_jypt_jiadian_cate3_pred_20181109 CHANGE utem_third_cate_name item_third_cate_nam ...

  5. 解决电脑需要切换IP带来的MySQL连接问题

    直接上代码: import socket #获取本机电脑名 myname = socket.getfqdn(socket.gethostname( )) #获取本机ip myip = socket.g ...

  6. go系列之数组

    数组 数组是同一类型元素的集合.例如,整数集合 5,8,9,79,76 形成一个数组.Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组.(译者注:当然,如果是 interface{} ...

  7. Python学习手冊笔记

    之前为了编写一个svm分词的程序而简单学了下Python.认为Python非常好用.想深入并系统学习一下,了解一些机制,因此開始阅读<Python学习手冊(第三版)>. 假设仅仅是想高速入 ...

  8. 前端 JS,localStorage/sessionStorage、cookie 及 url 等实现前台数据共享、传输

    需求是这样的:需要统计用户公司某款产品用户的回馈情况,美工给的设计多个psd,每个页面里面都有一个选择题,让用户选择自己的答案,最后经过几次选择之后在最后一个页面统一提交到后台!所以这里引出的技术需求 ...

  9. zabbix应用之Low-level discovery监控磁盘IO

    参考文章: http://qicheng0211.blog.51cto.com/3958621/1599776/ zabbix自带的"Template OS Linux"模板支持监 ...

  10. iOS开发之弹出输入框

    最近项目里有个需求要弹出输入框,GitHub上搜了一圈没发现太合适的轮子,就自个儿撸了一个,传送门在这里https://github.com/wozyao/ZYInputAlert,有需要的同学可以d ...