一台机器git配置gitee和github两个账号和邮箱

本文详细介绍如何在Windows 10环境下,通过TortoiseGit和Git,为Gitee和GitHub分别配置独立的SSH密钥,实现无密码登录及避免账号密码冲突,适用于公司和个人项目的独立管理。

环境:

window10 64位
tortoisegit
git
gitee

背景

由于公司使用gitee部署私有代码库,个人有需求查看github的开源代码,如果配置全局的账号密码会冲突。所以有必要生成两个id_rsa.pub密钥分别配置到github和gitee的ssh密钥中去。

步骤

  1. 下载git和tortoisegit

  2. 在空文件夹右键“Git Bash Here”,如图所示,进去git bash界面。
    在这里插入图片描述

  3. 设置无密码登录
    a.生成第1个git无密码登录的id_rsa

    ssh-keygen -t ed25519 -f ~/.ssh/id_rsa_gitee -C “123456@qq.com”

    如图所示,直接回车即可
    无密码登录
    b.生成第2个git无密码登录的id_rsa

    ssh-keygen -t ed25519 -f ~/.ssh/id_rsa_github -C “654321@qq.com”

  4. 此时能在~/.ssh/config文件中看到第一个邮箱的配置,添加第二个邮箱配置。

    vim ~/.ssh/config

      # 该文件用于配置私钥对应的服务器
      # first user
      Host gitee.com
      HostName gitee.com
      User 123456@qq.com
      IdentityFile ~/.ssh/id_rsa_gitee
     
      # second user
      Host github.com
      HostName github.com
      User 654321@qq.com
      IdentityFile ~/.ssh/id_rsa_github
    
  5. 将id_rsa_gitee.pub和id_rsa_github.pub分别配置到gitee.com和github.com的ssh公钥配置中。
    在github找到“Settings->SSH and GPG keys”添加id_rsa_github.pub
    在这里插入图片描述

  6. 取消git的全局配置(如果之前就有配置的情况下)

    git config --global --unset user.name “XXX”
    git config --global --unset user.email “xxx@xx.com”

    查看是否取消成功:

    git config --global -l

    如图下图所示,如果没有用户名和邮箱就代表取消了全局配置了。

  7. 执行ssh识别
    (1)#Start the ‘ssh-agent.exe’ process

    eval $(ssh-agent -s)

    (2)#install the SSH keys

    ssh-add ~/.ssh/id_rsa_gitee
    ssh-add ~/.ssh/id_rsa_github

    (3)# show all id_rsa

    ssh-add -l

    在这里插入图片描述
    注意:
    a) 如果ssh-add这步报错:Could not open a connection to your authentication agent.

    需要先启动ssh-agent,也就是上面的第一个步骤。
    参考链接:https://stackoverflow.com/questions/17846529/could-not-open-a-connection-to-your-authentication-agent

    b) 如果执行ssh-add -l报错:Could not open a connection to your authentication agent.

    需要先将密钥添加,也就是上述的第二步。
    参考链接:https://stackoverflow.com/questions/26505980/github-permission-denied-ssh-add-agent-has-no-identities

  8. 测试是否能无密码连接成功

    ssh -T git@gitee.com
    ssh -T git@github.com
    在这里插入图片描述

  9. 此时可以克隆代码到本地了。

注意:(未经测试)
有文章说需要配置不同项目下的用户名和邮箱,在此做一个备注。
需要进入到需要修改的git工程目录中

git config user.name 用户名
git config user.email 邮箱

参考链接:

1、https://blog.youkuaiyun.com/qq1332479771/article/details/70149616
2、https://blog.youkuaiyun.com/jifaliwo123/article/details/79126785
3、http://www.xuanfengge.com/using-ssh-key-link-github-photo-tour.html
4、https://gist.github.com/yeungeek/596984fd9e53d6c36c0d
5、https://favoorr.github.io/2015/05/27/git-more-sshkeys-more-host/

<think>好的,用户现在的问题是在Linux机器上如何切换Git账号。根据用户提供的引用,特别是引用[1],其中提到使用git config命令来修改全局用户名邮箱,但同时也提醒在一台服务器上有多个Git用户时要慎用全局配置。用户之前的对话中,我给出的回答是关于配置Git环境、SSH密钥以及华为CodeHub的具体步骤,但现在用户的需求更偏向于多账号切换,而不是单一配置。 首先,我需要确认用户的使用场景。可能的情况是,用户在同一台Linux机器上需要管理多个Git账户,比如同时使用公司账号个人账号,或者为不同的项目使用不同的身份。这时候,全局配置显然不合适,因为会覆盖所有仓库的设置,导致提交信息混乱。 接下来,我需要参考引用中的信息。引用[1]提到使用git config --global来设置用户名邮箱,但同时也警告在多个用户的情况下要谨慎。这说明用户可能需要更灵活的方法,比如针对不同的仓库使用不同的配置,而不是全局设置。引用[2][4]涉及Git的基本操作,如克隆、提交、切换分支等,可能与切换账号相关的是仓库级别的配置。引用[3]介绍了Git的基本概念,但可能对当前问题帮助不大。 用户之前的回答中,我提到了全局配置仓库级权限加固,但可能没有详细说明多账号切换的具体方法。现在需要补充这方面的内容。根据最佳实践,切换Git账号通常有几种方法:仓库级别配置、SSH配置多密钥、环境变量覆盖、脚本自动化等。 需要检查用户是否了解这些方法,或者是否有特定的需求,比如是否需要同时使用多个账号访问不同的远程仓库(如GitHub公司Git服务器)。根据用户的问题,他们可能已经知道全局配置,但需要更灵活的切换方式。 另外,用户可能希望在不影响其他仓库的情况下切换账号,因此仓库级别的配置会是重点。同时,SSH密钥的管理也很重要,因为不同的账号通常使用不同的密钥对进行认证。比如,在~/.ssh/config文件中为不同的Host配置不同的密钥,这样在克隆或推送时自动使用对应的密钥。 可能还需要考虑如何验证配置是否正确,比如使用ssh -T来测试连接,以及git config --list查看当前配置。此外,用户可能遇到常见问题,如权限错误、密钥未加载等,需要给出故障排除的步骤。 总结一下,回答需要包括以下部分: 1. 全局与仓库级别配置的区别,强调仓库级别的配置优先级更高。 2. 使用SSH多密钥对,配置不同的Host来对应不同的账号。 3. 提供具体步骤,如生成多个密钥、配置SSH config、设置仓库的用户信息。 4. 验证步骤,确保切换成功。 5. 常见问题及解决方法,比如权限问题、密钥未正确加载等。 6. 可能的高级方法,如使用环境变量或脚本自动化切换。 需要确保回答结构清晰,步骤明确,符合用户的技术水平。同时,引用之前的引用内容,比如引用[1]中的警告,说明为什么全局配置不适合多账号场景,并推荐更安全的方法。</think>### Linux系统多Git账号切换解决方案 根据引用[1]的提示实际开发需求,以下是三种专业级账号切换方案(以同时使用公司GitLab与GitHub个人账号为例): --- #### 一、SSH多密钥智能路由(推荐方案) ```bash # 生成两套密钥(公司/个人) ssh-keygen -t ed25519 -f ~/.ssh/gitlab_work -C "work@company.com" ssh-keygen -t ed25519 -f ~/.ssh/github_personal -C "personal@domain.com" # 配置智能路由 (~/.ssh/config) Host gitlab.company.com HostName gitlab.company.com User git IdentityFile ~/.ssh/gitlab_work IdentitiesOnly yes Host github.com-personal HostName github.com User git IdentityFile ~/.ssh/github_personal IdentitiesOnly yes ``` * **原理**:通过自定义Host别名实现协议层自动切换(引用[4]的分支切换思想延伸) * **验证命令**: ```bash ssh -T git@gitlab.company.com # 应显示公司账号 ssh -T git@github.com-personal # 应显示个人账号 ``` --- #### 二、Git目录级配置覆盖(项目隔离) ```bash # 公司项目目录 mkdir -p ~/work_projects && cd ~/work_projects git config --local user.name "Employee123" git config --local user.email "work@company.com" # 个人项目目录 mkdir -p ~/personal_projects && cd ~/personal_projects git config --local user.name "DevNick" git config --local user.email "personal@domain.com" ``` * **优先级机制**: `local配置 > global配置`(如引用[1]所述场景的逆向应用) * **查看生效配置**: ```bash git config --list --show-scope # 显示local/global配置层级 ``` --- #### 三、环境变量动态注入(CI/CD适配) ```bash # 快速切换工作账号 export GIT_AUTHOR_NAME="Employee123" export GIT_AUTHOR_EMAIL="work@company.com" export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME" export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL" # 验证环境变量优先级 git commit -m "测试提交" # 提交者信息将被环境变量覆盖 ``` * **作用范围**:仅当前shell会话有效(安全隔离) --- ### 配置验证矩阵 | 验证维度 | 方法 | 预期结果 | |----------------|-------------------------------|----------------------------| | SSH密钥路由 | `ssh -Tv git@github.com-personal` | 显示个人账号身份 | | 提交者信息 | `git log --pretty=format:"%an <%ae>"` | 显示对应账号信息 | | 配置优先级 | `git config --get user.email` | local > env > global | --- ### 高级技巧:Git条件配置 在`~/.gitconfig`中实现智能识别(需Git 2.13+): ```ini [includeIf "gitdir:~/work_projects/"] path = .gitconfig-work [includeIf "gitdir:~/personal_projects/"] path = .gitconfig-personal ``` 创建对应配置文件: ```bash # ~/.gitconfig-work [user] name = Employee123 email = work@company.com # ~/.gitconfig-personal [user] name = DevNick email = personal@domain.com ``` --- ### 典型问题排查 **问题1**:提交仍显示全局用户 - 检查命令:`git config --list --show-origin` - 解决方案:删除全局配置 `git config --global --unset user.email` **问题2**:SSH认证失败 - 诊断命令:`GIT_SSH_COMMAND="ssh -v" git pull` - 常见原因:密钥权限过高(需`chmod 600 ~/.ssh/*_rsa`) --- ### 应用场景建议 - **开发机共享**:采用目录级配置 + SSH密钥路由 - **CI/CD流水线**:使用环境变量动态注入 - **多租户环境**:结合Docker容器隔离不同账号环境 --- ## 相关问题 1. 如何同时管理多个Git托管平台(如GitLab、GiteeGitHub)的SSH密钥? 2. Git提交记录中出现错误的作者信息该如何修正? 3. 在自动化脚本中如何安全地切换Git认证信息?
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值