在学习廖雪峰Git教程时,学习到 如何参与一个开源项目时,把别人的github开源项目Fork到自己账号的github后,然后再把Fork的项目clone(克隆)到本地,修改本地后push到自己的github上,然后把修改的内容pull request 给Fork的人,别人不一定接受你的pull request。所以想自己完整测试一下。

现在开始:

我的配置主要参考了一篇文章《一台电脑绑定两个github帐号教程》

思路:

1.需要注册两个github账号。

2.本地的git仓库通过ssh连接到github。

3.ssh 方式链接到 Github,需要唯一的公钥,如果想同一台电脑绑定两个Github 帐号,需要两个条件:

  • 能够生成两对 私钥/公钥
  • push 时,可以区分两个账户,推送到相应的仓库

解决方案:

  1. 生成 私钥/公钥 时,密钥文件命名避免重复
  2. 设置不同 Host 对应同一 HostName 但密钥不同
  3. 取消 git 全局用户名/邮箱设置,为每个仓库独立设置 用户名/邮箱(也可以不用取消全局的用户名和邮箱设置。因为要clone其他项目到本地,需要用到用户名和邮箱,如果设置了全局的用户名和邮箱,之后无论你在该系统上做任何事情, Git 都会使用那些信息。)

操作方法

  1. 查看已有秘钥
    1. Mac 下输入命令 ls ~/.ssh/,看到 id_rsa 与 id_rsa_pub 则说明已经有一对密钥。
    2. windows下ssh一般是在 C:\Users\Administrator\.ssh\  这个路径下,看到 id_rsa 与 id_rsa_pub 则说明已经有一对密钥。
  2. 生成新的公钥,并命名为 id_rsa3 (保证与之前密钥文件名称不同即可)
    1. 在git bush中的C:\Users\Administrator\.ssh路径下输入:ssh-keygen -t rsa -C "yourmail@xxx.com"
    2. 如图所示:
      Administrator@PMP9EOJWBH5149F MINGW64 ~/.ssh (master)
      $ ssh-keygen -t rsa -C "1@qq.com"
      Generating public/private rsa key pair.
      Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):id_rsa3

      在:后面填一个新的文件名,如:id_rsa3

    3. 然后后面直接敲回车就行。如图:

      Administrator@PMP9EOJWBH5149F MINGW64 ~/.ssh (master)
      $ ssh-keygen -t rsa -C "1@qq.com"
      Generating public/private rsa key pair.
      Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): id_rsa3
      Enter passphrase (empty for no passphrase):
      Enter same passphrase again:
      Your identification has been saved in id_rsa3
      Your public key has been saved in id_rsa3.pub
      The key fingerprint is:
      SHA256:6LKkuDrfstzhrWeq7RsGZZ/jlbIqW+XB2OcYCuta9sY 1@qq.com
      The key's randomart image is:
      +---[RSA 3072]----+
      |                 |
      |                 |
      |    o            |
      |   o = o .       |
      |  o . % S        |
      |   + * @         |
      |  +.O * .        |
      |.*o@EBo          |
      |*=OO&*.          |
      +----[SHA256]-----+
      
      Administrator@PMP9EOJWBH5149F MINGW64 ~/.ssh (master)
      

       

    4. 在 .ssh 文件夹下新建 config 文件并编辑,不同 Host 实际映射到同一 HostName,但密钥文件不同。Host 前缀可自定义,例子中xfzstart1
      #Host xfzstart.github.com(这里是自定义的host简称,以后连接远程服务器就可以用 xfzstart.github.com代替HostName 的github.com)
      #Host 是你远程仓库的地址,注意哦,如果有些服务器做的ip端口转发,这里不要带上端口号
      Host xfzstart.github.com
      #HostName 是远程仓库的地址,同样如果做的端口转发也不应带端口号
      #HostName 主机名可用ip也可以是域名(如:github.com或者bitbucket.org)
      HostName github.com
      #Port 端口号,如果有做转发需要在这里填写端口号,没有就不必要填
      #Port 服务器open-ssh端口(默认:22,默认时一般不写此行
      #Port 8800
      PreferredAuthentications publickey
      #用户
      #User 登录用户名(如:git)
      User xfzstart
      #识别key的文件
      #IdentityFile 证书文件路径(如~/.ssh/id_rsa_*)
      IdentityFile ~/.ssh/id_rsa
      
      #都指向同一个平台的话,下面的Host需要做个处理,因为我们在用这个key的时候根据Host从上到下进行查找,不做修改肯定会先查找到第一个key,依旧无效,随便改就好了,其他参数不做特殊处理
      Host xfzstart1.github.com
      HostName github.com
      PreferredAuthentications publickey
      #Port 8800
      User xfzstart1
      IdentityFile ~/.ssh/id_rsa3
    5. 将生成的 id_rsa.pubid_rsa_3.pub内容copy 到对应github的ssh设置中。
    6. 测试 ssh 连接,
    7. Administrator@PMP9EOJWBH5149F MINGW64 /d/learngit2/learn (main)
      $ ssh -T git@xfzstart1.github.com
      Hi xfzstart1! You've successfully authenticated, but GitHub does not provide shell access.
      
      Administrator@PMP9EOJWBH5149F MINGW64 /d/learngit2/learn (main)
      $ ssh -T git@xfzstart.github.com
      Hi xfzstart! You've successfully authenticated, but GitHub does not provide shell access.

      出现 Hi xfzstart! You've successfully authenticated, but GitHub does not provide shell access. 说明连接成功。

    8. 在指定的文件夹下将项目 clone 到本地, learn1 是本地文件夹路径(重命名远程仓库的目录),可以不填写,clone到本地的文件夹是默认是远程的目录名
      Administrator@PMP9EOJWBH5149F MINGW64 /d/learngit2
      $ git clone git@github.com:xfzstart1/learn.git learn1
      Cloning into 'learn1'...
      remote: Enumerating objects: 6, done.
      remote: Counting objects: 100% (6/6), done.
      remote: Compressing objects: 100% (3/3), done.
      remote: Total 6 (delta 0), reused 3 (delta 0), pack-reused 0
      Receiving objects: 100% (6/6), done.
      
      Administrator@PMP9EOJWBH5149F MINGW64 /d/learngit2
      $ git clone git@github.com:xfzstart1/learn.git
      Cloning into 'learn'...
      remote: Enumerating objects: 3, done.
      remote: Counting objects: 100% (3/3), done.
      remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
      Receiving objects: 100% (3/3), done.
      

       

    9. 取消全局 用户名/邮箱设置,并进入项目文件夹单独设置
      #取消全局 用户名/邮箱设置。
      Administrator@PMP9EOJWBH5149F MINGW64 /d/learngit2
      $ git config --global --unset user.name
      
      Administrator@PMP9EOJWBH5149F MINGW64 /d/learngit2
      $ git config --global --unset user.email
      
      
      #进入项目文件夹单独设置
      Administrator@PMP9EOJWBH5149F MINGW64 /d/learngit2/learn (main)
      $ git config user.name "xufuzeng1"
      
      Administrator@PMP9EOJWBH5149F MINGW64 /d/learngit2/learn (main)
      $ git config user.email "2940458089@qq.com"
      

       

    10. 命令行进入项目目录,重建 origin (whatever 为相应项目地址)
      #取消远程
      Administrator@PMP9EOJWBH5149F MINGW64 /d/learngit2/learn (main)
      $ git remote rm origin
      #重新建立远程,xfzstart1.github.com为config文件中 Host对应的名
      Administrator@PMP9EOJWBH5149F MINGW64 /d/learngit2/learn (main)
      $ git remote add origin git@xfzstart1.github.com:xfzstart1/learn.git
      

       

    11. 成功,可以 push 测试一下
      Administrator@PMP9EOJWBH5149F MINGW64 /d/learngit2/learn (main)
      $ git push origin main
      Everything up-to-date
      

      参考资料:《一台电脑绑定两个github帐号教程》

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐