Git 配置多帐号


解决同一台电脑上不同仓库不同Git账号问题


〇、基础知识

  • git认证方式
    • HTTPS
      • 输入对应的 user 和 password
    • SSH (Secure Shell)
      • 使用 ssh 命令生成 RSA 密钥对,将 public key 提交到服务器,本地保留 private key。
      • SSH 可以通过 config 来管理多用户
  • ssh目录
    • mac:
      • ~/.ssh/,
    • windwos:
      • C:\Users\自己的用户名\.ssh
  • 连接Github邮箱需要设置成public

一、移除全局配置

rem 查询git全局配置,如果存在,取消全局设置
git config --list
rem 移除全局配置账户
git config --global --unset user.name
rem 移除全局配置邮箱
git config --global --unset user.email
rem 移除全局密码
git config --global --unset user.password

二、创建不同user的SSH key

ssh-keygen -t rsa -f ~/.ssh/id_rsa_github -C "XXXXXXXXX@github.com"
ssh-keygen -t rsa -f ~/.ssh/id_rsa_gitlab -C "XXXXXXXXX@gitlab.com"
  • -t rsa
    • 指定生成密钥类型(type)为 rsa 非对称加密
  • -f ~/.ssh/id_rsa_github
    • 不指定时默认生成在ssh目录
      • 如果在其他路径打开bash,自定义名字的密钥会生成在当前路径
    • 指定生成密钥存放文件(file)为 SSH目录下id_rsa_github**, 该文件名可以由用户自己命名
    • ~/.ssh/自定义文件名,windows和mac都可以这样写
  • -C "XXXXXXXXX@github.com"
    • 给该密钥添加注释(comment),一般使用关联该 git 账户的 email.

  • tips:
    • 若没有指定 -f,会现需要输入生成的文件名,回车默认为id_rsaid_rsa_pub
    • 执行此命令后需要你输入要生成的密钥文件的口令(密码)和重复输入口令,连按回车键即可,设置密钥文件口令为空从而实现免密码登录。
    • 在ssh目录下生成的密钥文件分别为
      • id_rsa_* 私钥文件,本地私人使用
      • id_rsa_*.pub 公钥文件,可以公开使用。

三、添加公钥到git服务器

将id_rsa.pub里面的内容添加到SSH Key中

测试SSH公钥是否生效,注意ssh默认端口为22,如果不是需要通过-p 端口号指定端口号

ssh -T git@github.com -i ~/.ssh/id_rsa_github
ssh -T git@10.10.24.1 -p 222 -i ~/.ssh/id_rsa_gitlab

四、配置config文件

  • 在ssh目录下找到config文件,如果没有就创建,每个账号配置一个Host节点。主要配置项说明:

    User git
    Host          # 主机别名(自定义)
    HostName      # 服务器真实地址【域名或者ip地址】
    IdentityFile  # 私钥目录【windows范例:C:\\Users\\你的用户名\\.ssh\\id_rsa,mac范例:~/.ssh/id_rsa】
    PreferredAuthentications  # 认证方式
  • 配置文件内容:

    # github
    User git
    Host github
    HostName github.com
    # win配置
    IdentityFile C:\\Users\\XXXXXXX\\.ssh\\id_rsa_github
    # mac配置
    # IdentityFile ~/.ssh/id_rsa_gitlab
    PreferredAuthentications publickey
    
    # gitlab
    User git
    Host gitlab.com
    HostName 10.10.24.1
    Port 222
    # win配置
    IdentityFile C:\\Users\\XXXXXXX\\.ssh\\id_rsa_gitlab
    # mac配置
    # IdentityFile ~/.ssh/id_rsa_gitlab
    PreferredAuthentications publickey
    
  • 测试私钥是否生效, 注意:@ 符号前后的参数要与上面 User 和 Host对应上

    ssh -T git@github.com
    ssh -T git@gitlab.com -p 222

    tips:

  • 如果出现了SSH连接需要密码的情况,修改为和HostName一样后解决。
    参考

五、其他配置

为每一个项目设置不同的用户名和邮箱

cd 项目/.git
git config user.name "xxx"
git config user.email "xxx@example.com"

六、问题

  • ~/.ssh目录配置gitlab之后,导致shell无法通过ssh登陆

    • 修改gitlab配置文件的host值,设置为自定义的名称「这个会修改gitlab仓库生成的ssh地址」

      cd /opt/gitlab/embedded/service/gitlab-rails/config
      vi gitlab.yml
    • 在config文件的gitlab的host后面也配置为自定义的名称。

    • 这样是shell通过ip登陆,gitlab通过指定的host名字登陆

  • 如果原先使用HTTPS通信,则需要修改远程仓库地址

    git remote rm origin
    git remote add origin git@user1.github.com:xxx/xxxxx.git
  • 待验证

    • 使用的是 IDEA,比如 AS,还需要设置 SSH 使用本地(native)的客户端,而非 AS 内嵌(build in)的 SSH 客户端
    • Mac,可能会遇到升级系统或者重启系统之后,SSH私钥失效的问题
    • ssh agent
      • ssh-agent 会话是一个临时的会话,在终端退出后也随之结束

  目录