电脑支持 git 多账号

假设我有两个 GitHub 账号, 名为 zs(张三) 和 ls(李四). 张三李四存储 ssh key 的文件夹 .ssh/ssh-key-xx/ 的内容各自有如下结构:

1
2
3
4
5
6
7
8
.ssh/
id_rsa
id_rsa.pub
known_hosts
.gitconfig
.gitignore_global
.lesshst
.stCommitMsg

其中 .ssh 文件夹内由 ssh-keygen -t RSA -C email 生成, .gitconfig 是配置文件, .gitignore_global 是全局 ignore 配置文件, .stCommitMsg 是 commit 信息模板.

.gitconfig 文件模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[user]
name = USERNAME
email = EMAIL_ADDRESS
[core]
excludesfile = /root/.gitignore_global
[difftool "sourcetree"]
cmd = opendiff \"$LOCAL\" \"$REMOTE\"
path =
[commit]
template = /root/.stCommitMsg
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[init]
defaultBranch = master
[http]
proxy = http://0.0.0.0:1080
[https]
proxy = http://0.0.0.0:1080
[git]
proxy = http://0.0.0.0:1080

.gitignore_global 文件模板:

1
2
3
*~
.DS_Store
.env

Windows

使用 ssh 自带的 config 功能

配置 ~/.ssh/config 文件

1
2
3
4
5
6
7
8
9
10
11
Host zs
HostName github.com
IdentityFile C:\\???\\.ssh\\ssh-key-zs\\.ssh\\id_rsa
PreferredAuthentications publickey
User git

Host ls
HostName github.com
IdentityFile C:\\???\\.ssh\\ssh-key-ls\\.ssh\\id_rsa
PreferredAuthentications publickey
User git

上面配置的意思为, 使用 zs 账号时将 github.com 替换成 zs 别名, 例如 git clone git@zs:username/project.git, 这时 git@zs 将对 张三账号有权限. git@ls 将对李四账号有权限.

在首次设置过远程地址 git remote add origin git@zs:... 或克隆远程地址 git clone git@zs:... 之后, 再使用就正常进行操作即可.

MacOS

方法 1: 参考 Windows.

方法 2: 安装 docker, 在 ~/.zshrc 中定义函数, 用于调用 docker 的 git 镜像, 实现多账号功能

1
2
3
4
5
6
function gitzs () {
(docker run -ti --rm -v ${HOME}/.ssh/ssh-key-zs/:/root/ -v ${PWD}:/git alpine/git "$@")
}
function gitls () {
(docker run -ti --rm -v ${HOME}/.ssh/ssh-key-ls/:/root/ -v ${PWD}:/git alpine/git "$@")
}

使用 gitzs 命令 替代 gitgitzs clone git@github.com:username/project.git 将对张三账号有权限. 同样, 使用 gitls 命令替代 git 将对李四账号有权限

之后都使用 gitzsgitls 替代 git 命令, 实现对张三李四账号的控制.

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.