在多项目开发的情况下,实际情况下我们可能需要一台设备上使用不同的 Git 账户进行开发,在需要的时候进行切换角色,以保证在不同项目中使用特定账户。
多用户配置
Git 支持两种操作远程仓库的协议 SSH 和 HTTPS
协议 | 验证和传输 | 配置 | 安全性 | 速度 | 便携性 |
---|---|---|---|---|---|
SSH | SSH | ✓ | 高 | 快 | 差 |
HTTPS | TLS/SSL | × | 低 | 慢 | 好 |
SSH 是使用公钥加密和私钥解密的方式进行身份验证和数据传输,需要在本地计算机上生成 SSH 密钥对,并将公钥绑定到 Git 存储库中。使用 SSH 加密协议进行数据传输,速度较快。但这个过程需要一些额外的步骤和配置。
HTTPS 协议使用 TLS/SSL 协议进行身份验证和数据传输,安全性较 SSH 协议略低。使用 HTTPS 协议不需要任何配置,只需要使用用户名和密码进行身份验证即可。使用 TLS/SSL 加密协议进行数据传输,速度较慢。
SSH
如果你想通过 SSH 区分多用户,首先需要使用 ssh-keygen 命令在配置 SSH 的时候创建多个用户的公钥,将每个用户的域别名添加到 config 配置中就可以了。
语法
ssh-keygen -t rsa -C “your_email@example.com” -f first_name
参数 | 描述 |
---|---|
-t | 指定密钥类型,默认是 rsa ,可以省略 |
-C | 设置注释文字,可以写邮箱 |
-f | 指定密钥文件存储文件名,默认 id_rsa |
在 Windows 下,SSH 密钥默认储存在 C:\Users\username\.ssh
,如果在 Powershell 中操作需要手动切换到 .ssh 目录
cd ~/.ssh
当然你也可以直接使用 Git Bash,它会帮你把密钥放在 .ssh 目录下
ssh-keygen -t rsa -C “your_email@example.com” -f first_name
ssh-keygen -t rsa -C “your_email@example.com” -f second_name
密钥创建完成后,你需要进入C:\Users\username\.ssh
目录下,将公钥(first_name.pub)复制下来,绑定到对应的 Git 账户中,这里以 Github 为例。
然后打开 config 配置文件,填写用户配置
在终端中使用时,将原本的 git@github.com 更改为特定用户的 git@first_name 既可,后面的内容保持不变
git clone git@first_name:rogerdudler/git-guide.git
HTTPS
如果你使用 HTTPS 切换用户,那么只需要手动设置 Git 的用户名和邮箱既可
git config --global user.name “用户名”
git config --global user.email “邮箱”
git config --global --list
如果是单个项目,相对的你可以使用 Git 的配置级别,在项目中使用 local 级别覆盖 global 级别的用户配置,从而不影响其他项目的配置。
首先我们需要一下 Git 的配置级别,分别是 system(系统级)、global(用户级)和 local(项目级)
配置优先级: local > global > system
配置级别 | 名称 | 描述 | 相关命令 |
---|---|---|---|
local | 项目级 | 项目级配置文件,只在当前项目有效(.git/config) | git config [--local] |
global | 用户级 | 用户级配置文件,适用于特定一个用户 | git config --global |
system | 系统级 | 系统级配置文件,对系统中所有用户都适用 | git config --system |
注
- 配置级别优先级越高的配置会覆盖低级别的同属性配置,如果多用户配置不生效,也有可能是配置优先级不够,配置被覆盖。
当然你会说每次都要手动切换不是太麻烦了,确实,手动切换很难保证不会输入错误,而且这种方法实在繁琐,但是目前似乎也没有其他的解决方法:(
多用户切换
Shell切换
对于双用户切换的操作,可以编写 Windows 下的 Shell 脚本来完成,原理上是进行调用 Git Bash 实现
首先,我们创建一个 git-account-switch.sh 文件,根据实际用户修改以下文件内容
然后将 git-account-switch.sh 文件使用 Git Bash 运行
这种方法的缺点是只能为两个 Git 用户提供切换,要支持更多的 Git 用户,就需要编写更为复杂的脚本,难免有些大题小作。
插件切换
如果你使用 VScode,那么还可以通过 VScode 中的 Git-Identity switcher 插件实现用户切换功能,这个插件会在底部工具栏左下角出现一个小人图案的切换按钮,配置之后就能快速切换 Git 用户。
遗憾的是还没找到 jetbrains idea 的相关插件,建议先使用 Shell 切换方式暂时代替
缓存引起的 Git 用户错误
在切换 Git 用户的情况下,你可能会遇到正确配置了 Git 用户,并且登录了正确用户的前提下,使用 Git 命令查看显示之前 Git 用户的情况。
git config user.name
git config user.email
这是因为 Git 缓存了用户配置,没有成功更新,你可以查看 Git 当前的缓存方式
git config credential.helper
然后使用对应的缓存方式来重置 Git 用户配置
git config --global credential.helper store
git config --global credential.helper wincred
git config --system --unset credential.helper
git credential-manager uninstall
如果提示没有权限,可以进入 控制面板\用户帐户\管理我的凭证>Windows 凭证>普通凭证 中找到 git:https://github.com
凭证手动删除,然后重新使用命令配置 Git 用户名和邮箱既可。