GIT配置同设备多账号管理与SSH配置

2023-03-06

配置SSH进行远程服务器快速连接

修改~/.ssh/config文件进行配置

Host server01  # 配置服务器别名
    HostName xxx.xxx.xxx.xxx  # 服务器ip
    User root  # 登录用户名

配置完成后,可使用别名进行连接

# 原本的连接,需要用户名和真实ip
ssh root@xxx.xxx.xxx.xxx

# 配置完成后可使用别名直接连接
ssh server01

处理长时间未使用导致的远程连接断开

配置文件中增加轮询防止ssh自动断开

Host *
    ServerAliveCountMax 5  # 断开时重试连接的次数
    ServerAliveInterval 5  # 每隔5秒自动发送一个空的请求以保持连接

单台设备多个git账号公钥的配置

  • 控制台键入ssh-keygen -t rsa -C "邮箱"生成公钥(单个邮箱单种加密只可生成一个公钥匙。因不指定文件名会进行覆盖)

  • cat ~/.ssh/id_rsa.pub查看公钥,将其复制进git的ssh公钥中(例如gitlab,github等)

  • git平台保存公钥时可将标题指明为设备,防止单个邮箱在多个设备上生成不同的公钥,产生混淆

在生成公钥时一般使用邮箱进行生成。如要区分公司账号与自己账号,自己账号尽量使用同一个邮箱,后续会有说明

注意: 同一个邮箱使用同一种加密算法生成的公钥相同。在生成公钥时,尽量每个站点生成名称不同的公钥文件

Host gitlab.com
    HostName gitlab.com
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_gitlab  # gitlab的公钥

Host github.com
    HostName github.com
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa  # github的公钥

Host gitee.com
    HostName gitee.com
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa  # gitee的公钥

配置完成后进行测试

ssh -T git@gitlab.com  # 测试gitlab的公钥配置是否成功
ssh -T git@github.com  # 测试github的公钥配置是否成功
ssh -T git@gitee.com  # 测试gitee的公钥配置是否成功

说明:多个git平台可使用相同的公钥文件。以上述github与gitee为例,由于是同一个邮箱,使用相同的公钥

查看git配置与多个git平台账号问题

  • 查看git系统配置(非必须) git config --system --list

  • 查看git全局配置 git config --global --editvim ~/.gitconfig

[user]
        name = xxx
        email = xxx@xx.com
  • 查看git项目配置 git config --local --listvim .git/config

在初次git使用时,可能配置了全局的用户名与邮箱(global配置)。该配置会让该设备所进行的所有推送都将使用该用户名与邮箱。

注意:

  • 在未设置全局与项目的情况下,终端中使用git push将使用系统配置,若无系统配置,将使用设备系统设置中的用户名与邮箱进行推送

  • 邮箱 是确定 提交 git平台账号的标识。如果邮箱不匹配git平台账号,则git平台会显示为其他用户推送,不会正常统计git平台账号的贡献次数。commit信息异常请检查执行commint操作的邮箱是否正确,与执行push操作的邮箱无关

  • 修改指定项目的推送用户名和邮箱。通过bash执行git config --local user.name "xxx" git config --local user.email "xxx@xx.com"

或编辑项目的.git/config添加(通过bash命令添加即是在config中加入下列对应参数)

[user]
        name = xxx
        email = xxx@xx.com

设置项目推送的 邮箱 与git平台账号一致,以保证git平台正常统计。即使用户名不一致,使用邮箱一致即可(保证生成公钥邮箱、git登录邮箱、推送邮箱三者一致)

同一项目向多个git平台推送

  • 执行一次git push同时推送多个平台

    • 确保本地已存在该项目代码

      • 本地不存在时,选择一个仓库进行clone

      • 本地已存在时,可执行一次git push保证已有平台上的代码为最新代码

    • 在另一个平台新建仓库(不需要仓库名一致)

    • 修改.git/config

    [remote "origin"]
            url = git@github.com:xxx/xxxxx.git
            # 添加需要额外推送的仓库git链接
            url = git@gitee.com:xxx/xxxxx.git
            fetch = +refs/heads/*:refs/remotes/origin/*
    
    • 执行git push将代码推送到新平台

    • 注意:以此方式进行推送,多个git平台在推送时将使用统一的用户名与邮箱。如果git平台的邮箱不一致,则无法使多个git平台同时正确的统计账号贡献信息

  • 配置多个remote进行多次推送保证多个git平台都能正常统计账号贡献信息

    • 修改.git/config,删除[remote "origin"],新增多个git平台的remote配置
    [remote "github"]
        url = git@github.com:xxx/xxxxx.git
        fetch = +refs/heads/*:refs/remotes/origin/*
    [remote "gitee"]
        url = git@gitee.com:xxx/xxxxx.git
        fetch = +refs/heads/*:refs/remotes/origin/*
    
    • bash中使用git remote 测试是否配置成功

    • 在推送前修改.git/config中的user信息

    [user]
            name = xxx
            email = xxx@xx.com
    
    • 推送时根据user信息对两个仓库分别进行修改后的推送
    # 推送github
    git push github matser
    # 推送gitee
    git push gitee master
    
  • 修改全局配置实现对用户名与密码的自动选择(需要git版本2.36.0)

    • 通过if对仓库地址进行判断从而读取不同的配置文件
    [includeIf "hasconfig:remote.*.url:git@gitlab.com*/**"]
          path = ~/.gitconfig-gitlab
    [includeIf "hasconfig:remote.*.url:git@github.com*/**"]
          path = ~/.gitconfig-github
    [includeIf "hasconfig:remote.*.url:git@gitee.com*/**"]
          path = ~/.gitconfig-gitee