上一篇简单学习了下怎样利用git bash上传文件到指定的github项目中,我们来回顾下。首先在本地安装好git,设置好用户名和邮箱(提交时的显示),接着我们生成SSH key把它添加到该项目owner账户的key setting中,表示本地可以读写该项目了,接着我们就可以愉快地clone和push了。当你修改了项目后,会显示你的信息,比如:

github根据配置文件的user.email来获取github帐号显示author信息,so这里的信息正是在global config设置时的user.email对应的github账户名,如果你设置的email没有注册过github,那么会显示global config设置时的user.name,如果没有global设置,可以在进入每个项目后单独设置name和email信息,设置方式如下:

$ git config user.name "hanzichi" //给自己起个用户名
$ git config user.email  "abc@gmail.com" //填写自己的邮箱

设置完可以在该项目的.git文件夹的config文件中看到相应设置信息,这样就可以为每个项目设置不同的提交用户名了。需要注意的是,如果设置了global则以global优先,如果没有设置global则查看每个项目的设置(在.git的config文件中),如果还没有,则用unknown提交。


言归正传,本文主要要将的是如何设置多个SSH key。为什么要设置多个SSH key?一个github账户的后台可以添加多个ssh key(可以多人修改该项目),但是同一个ssh key只能添加到一个github后台上(同一个ssh key可以添加到不同的服务器上)。这也可以理解,毕竟ssh key相当于密码,同一个密码当然只能对应一个账户了。那如果本地要修改多个github账户下的项目呢?只能添加多个git用户了。举个栗子,这里有个项目,我要在本地对它作修改。首先,上文中获得的ssh key已经不能使用了,怎么办呢?

1、生成新的ssh key:


#新建SSH key:
$ cd ~/.ssh # 切换到C:\Users\Administrator\.ssh
ssh-keygen -t rsa -C "mywork@email.com"  # 新建工作的SSH key
# 设置名称为id_rsa_work
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): id_rsa_work

我们打开.ssh文件夹可以发现生成了两个新的东西,id_rsa_workid_rsa_work.pub,把公钥添加到对应github账户的后台key setting中,然后我们试着执行clone和push的命令,出错了:

2、新建config文件


这时我们需要在.ssh文件夹下新建个config文件(相当于一个映射文件),文件内容比如这样:

# 该文件用于配置私钥对应的服务器
# Default github user(first@mail.com)
  Host github.com
  HostName github.com
  User git
  IdentityFile C:/Users/xlianyu/.ssh/id_rsa

# second user(second@mail.com)
# 建一个github别名,新建的帐号使用这个别名做克隆和更新
  Host github2
  HostName github.com
  User git
  IdentityFile C:/Users/xlianyu/.ssh/id_rsa_work

在每次push的时候,本地的私钥都会和服务端(github)的公钥去匹配,如果一致就可以push了;而没设置config文件之前,本地的私钥都会读取id_rsa文件,很显然这是第一次设置时产生的私钥。我们可以测试一把,看看本地能不能通过SSH跟github2服务器通信了:

$ ssh -T github2
Hi FishLeong! You've successfully authenticated, but GitHub does not provide she
ll access.

3、修改具体项目的config文件


设置完了config 文件,我们试着重新clone文件:

git clone git@github.com:FishLeong/test.git

在push前,我们还需要修改下该项目.git文件夹下的配置文件config:

url = git@github.com:FishLeong/test.git #修改前
url = github2:FishLeong/test.git #修改后

github2字样和上面的设置是对应的。很显然,我们需要引导它去读取正确的私钥去和服务端保存的公钥匹配。因为示例是的两个服务端都是github,如果是别的服务器的话,则保存服务器的域名就可以了。

参考

  1. git.md
  2. git初体验(七)多账户的使用
  3. 在GitHub多个帐号上添加SSH公钥
  4. git生成ssh key及本地解决多个ssh key的问题

2016-02-25:

关于提交信息,如果用了 global 命令,则用 global 的 user.email 提交,其次是 user.name。

$ git config --global user.name "hanzichi" //给自己起个用户名
$ git config --global user.email  "abc@gmail.com" //填写自己的邮箱

如果希望每个项目用单独的 user,可以先删除 global config:

$ git config --global --unset user.name
$ git config --global --unset user.email  

然后在项目中配置仅限于该项目的 user 信息:

$ git config user.name "hanzichi" //给自己起个用户名
$ git config user.email  "abc@gmail.com" //填写自己的邮箱

可以用 git config -l 命令查看当前项目下的信息。

常用命令:

  • git status
  • git add .
  • git commit -m 'add files'
  • git push origin master

如何配置多个ssh key的更多相关文章

  1. 配置GitHub的SSH key

    配置GitHub的SSH key 生成密钥对 打开git bash工具(Windows环境),Linux则直接打开命令行,执行下面的命令生成密钥文件 ssh-Keygen -t rsa -C &quo ...

  2. 配置github的SSH key及GitHub项目上传方式一——使用终端命令行

    GitHub是一个开源的大仓库,我们经常从github上下载项目进行学习和研究,下面是一个完整的步骤——往GitHub上传一个新项目. 一.注册GitHub账号 1.注册GitHub账号,地址:htt ...

  3. git配置多个ssh key

    随着工作的深入,我们通常都会有多个git账户.比如公司gitlab一个账户,github或gitee有一个账户.而平时我们又回通过 配置ssh公私钥认证的方式省去繁琐的登录远程仓库的操作,不同的git ...

  4. Mac下配置多个SSH KEY访问远程Git服务

    第一步 生成对应的ssh key 1 后面输入你的用户名 或者 邮箱 2 输入一个独立的ssh key名字 区别之前的名字 第二步  编辑 config文件 在.ssh/目录下面 在config文件配 ...

  5. Git高级之配置多个SSH key

    最近我们在代码托管平台上使用SSH的方式下拉代码,通常是用一个ssh key来拉取所有托管平台的代码,如码云,GitHub.GitLab等,但是总用一个不是太好.会有安全风险,这就需要为每个托管平台设 ...

  6. GitLab配置ssh key

    一.背景 当前很多公司都选择git作为代码版本控制工具,然后自己公司搭建私有的gitlab来管理代码,我们在clone代码的时候可以选择http协议,当然我们亦可以选择ssh协议来拉取代码.但是网上很 ...

  7. SSH连接GitHub并配置ssh key

    SSH连接GitHub并配置ssh key 配置git的ssh提交,主要需要以下三步: 1.设置Git的user name和email 2.生成ssh 3.配置git 的ssh key 一.设置Git ...

  8. git 配置ssh key

    第一次生成 ssh key 进入ssh目录  cd ~/.ssh,再输入:ls ,查看文件,如果有.pub的文件,说明已有ssh key 如果没有, 则生成秘钥:ssh-keygen -t rsa - ...

  9. git ssh key配置

    原文:https://blog.csdn.net/lqlqlq007/article/details/78983879 git clone支持https和git(即ssh)两种方式下载源码:  当使用 ...

随机推荐

  1. SqlServer服务器和数据库角色

    首先我们来阐述服务器(实例级别)的权限,实例级别和数据库级别权限的最大不同在于:实例级别的权限是直接授权给登录名,而数据库级别的全显示授予数据库用户的,然后数据库用户再与登录名匹配.(再SqlServ ...

  2. 全站HTTPs,没那么简单

    “全站 HTTPs”俨然成了目前的热门话题,很多网站都在摩拳擦掌要实行全站 HTTPs.凑巧,我们(沪江)也在推行这个计划. 一开始大家想得都很简单,把证书购买了.配好了,相应的路径改一改,就没有问题 ...

  3. JNA 如何 加载多个 存在依赖的 DLL 库

    JNA 的出现,极大的简化了原有的 JNI 技术.下面是JNA github地址:https://github.com/java-native-access/jna 1. 简单的一个例子: /** S ...

  4. 烂泥:centos单独编译安装gd库

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天一直在弄一个商城系统,该系统的源码及数据库都已经上传并创建完毕.但是在安装该系统时,却提示缺少gd库.如下: 使用php探针查看,发现php确实没 ...

  5. IIS中查看W3P.exe进程对应的应用程序池的方法

    对于IIS6可以运行 iisapp -a来显示应用程序池的性能列表. iisapp.vbs它是一个脚本程序,在安装2003时需要SP1才有 而IIS7可以直接用它的外壳命令 C:"Windo ...

  6. MMORPG大型游戏设计与开发(客户端架构 part2 of vegine)

    一个好的接口是尽可能让更多实用的方法进行整理封装,要记住的是不常用的方法和类最好不好封装到接口中,因为那样会造成本身的困惑.基础模块中并没有太多封装,甚至连一个类的封装也没有,而是一些很常用的工具方法 ...

  7. Stanford机器学习笔记-4. 神经网络Neural Networks (part one)

    4. Neural Networks (part one) Content: 4. Neural Networks (part one) 4.1 Non-linear Classification. ...

  8. 使用C#向ACCESS中插入数据

    使用C#向ACCESS中插入数据   1.创建并打开一个OleDbConnection对象 string strConn = " Provider = Microsoft.Jet.OLEDB ...

  9. inverse理解

    首先术语inverse 被翻译为反转的意思.inverse 制定了关联关系中的方向. 当set的inverse属性默认情况下,hibernate会按照持久化对象的属性变化来同步更新数据库. 得到两条s ...

  10. 升级Flash Builder 4.6中的Flash Player版本

    测试有效 本人按此方法升级到了flash player 15 Adobe自发布Flash Builder 4.6后,就暂停了Flash Builder新版本的发布.但AIR和FlashPlayer版本 ...