Git一台电脑多账号切换使用

最近多注册了一个Github账号,专门用于fork其他优秀项目的lete-fork
难免会在本地push一些代码上去,但Git有个毛病,它切换账户起来是非常麻烦的,各种上网查资料,和网友的咨询后,总结出了这篇文章内容
参考: https://blog.csdn.net/lqlqlq007/article/details/80613272

正文

这里建议使用ssh方式,千万不要使用https方式,之前我非常喜欢使用https方式clone和push、pull,每次操作都要输入用户名密码(其实我觉得者并没有什么烦的,直到最近我使用了lete-fork账号push的时候,需要切换账号,还要修改git config --gloabl user.name "xxxx"git config --gloabl user.email "xxxx"后我才知道,https是真的麻烦,其实就是我不想配置ssh)

我现在有两个Github账号分别是lete114lete-fork

我现在的全局用户是lete114,可使用git config --list进行查看user.nameuser.email

COPY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ git config --list ## 执行了该命令

diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=G:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
credential.helper=manager
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
user.name=lete114 # 全局的用户名
user.email=lete@lete114.top # 全局的邮箱
http.version=HTTP/1.1
http.postbuffer=524288000
http.sslverify=false
credential.helper=store
core.quotepath=false
core.repositoryformatversion=0

修改当前项目账户

此时我所在的项目是lete-fork的,我修改了部分代码,并想上传到远程仓库(我肯定要切换到lete-fork账户再进行提交)
由于我上面的全局账户是lete114,那么我所有的git操作都是使用的lete114账户进行的,这时我得使用lete-fork账户进行操作(仅当前项目)

此处声明一下--global的作用,global表示全局,如果写了–global的话就会修改全局账户,此处我只需使用lete-fork账户进行push操作,所以无需使用全局(一般全局账户都是自己的大号)

COPY
1
2
3
4
5
######### 此处命令不要使用,只是演示说明--global的作用,请执行下方代码块的命令 #########
# 设置当前项目的账户用户名是lete-fork
git config --global user.name "lete-fork"
# 设置当前项目的账户邮箱是lete-fork绑定的邮箱
git config --global user.email "lete0429@gmail.com"

只需以下命令进行局部账户修改(需要执行的命令是如下命令,并非上方代码块)

COPY
1
2
3
4
# 设置当前项目的账户用户名是lete-fork
git config user.name "lete-fork"
# 设置当前项目的账户邮箱是lete-fork绑定的邮箱
git config user.email "lete0429@gmail.com"

打开当前目录下的.git/config文件可用看出下方的[user]多了name和email

COPY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = git@github.com:lete-fork/test-push.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[user]
name = lete-fork
email = lete0429@gmail.com

配置lete114账户的SSH

此步骤是配置lete114账户的SSH
生成SSH

COPY
1
2
ssh-keygen -t rsa -C "你的邮箱"
#ssh-keygen -t rsa -C "lete@lete114.top"

执行命令后需要进行3次或4次确认:

  1. 确认秘钥的保存路径(如果不需要改路径则直接回车)
  2. 如果上一步置顶的保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖)
  3. 创建密码(如果不需要密码则直接回车)
  4. 确认密码

此处我是一路回车,并没有设置什么,此后默认生成路径是C:/Users/你电脑的当前用户名/.ssh(需要开启显示隐藏目录)
.ssh目录下生成两个文件名为id_rsaid_rsa.pub

复制id_rsa.pub文件里的全部内容,打开GitHub的账户设置(非仓库设置)
GitHub账户设置:https://github.com/settings/keys
然后点击New SSH Key按钮添加SSH配置,其中Title你可用自定义Key是刚刚复制id_rsa.pub文件里的全部内容,完成后点击Add SSH Key即可

克隆仓库是使用SSH方式,初次使用SSH方式会出现The authenticity of host ‘github.com (52.74.223.119)’ can’t be established.根据提示输入yes即可(随后C:/Users/你电脑的当前用户名/.ssh目录下会多出known_hosts文件)

配置lete-fork账户的SSH

C:/Users/你电脑的当前用户名/.ssh目录下打开Git Bash Here
生成SSH

COPY
1
2
ssh-keygen -t rsa -C "你的邮箱"
#ssh-keygen -t rsa -C "lete0429@gmail.com"

同上方lete114账户生成类似,但我这里要提醒一句,这次不能一路回车了
显示Enter file in which to save the key (/c/Users/Lete/.ssh/id_rsa):时就不要一路回车了,这路你需要重新起一个名字
为了区分我在后面追加了一个fork即id_rsa_fork(为了不和lete114账户冲突,此处建议规范,同我的命名方式一样在id_rsa后面追加_xxx_xxx命名法),随后就可用一路回车了

生成后同上方lete114账户一样在账户设置里添加id_rsa_fork.pub里的全部内容到SSH Key

账户切换

默认使用的是id_rsa的SSH也就是lete114的SSH,切换需要使用命令切换到id_rsa_fork(lete-fork账户)
可以使用以下命令查看当前Git Bash Here使用的是哪个账户的SSH
(注意:如果你在其他Git Bash Here里切换了SSH账户,当前的Git Bash Here是不会跟着切换的,也就是说你每次打开一个新的Git Bash Here就必须切换,否则默认就是id_rsa(lete114账户))

COPY
1
2
3
4
5
ssh -T git@github.com

## 执行上方命令后会输出
## Hi lete114! You've successfully authenticated, but GitHub does not provide shell access.

以下命令可以新增秘钥(注意秘钥地址要换成你要切换用户对应的秘钥地址)

COPY
1
2
## 切换到 id_rsa_fork (lete-fork账户SSH)
ssh-add ~/.ssh/id_rsa_fork

上方命令执行后你可能会发现输出了这句话Could not open a connection to your authentication agent.
则先执行这个命令ssh-agent bash再执行切换账户

COPY
1
2
3
4
5
6
ssh-agent bash
## 切换到 id_rsa_fork (lete-fork账户SSH)
ssh-add ~/.ssh/id_rsa_fork

## 执行上方命令后会输出
## Identity added: /c/Users/Lete/.ssh/id_rsa_fork (lete0429@gmail.com)

再次输入ssh -T git@github.com查看当前使用的是哪个账户

COPY
1
2
3
4
5
ssh -T git@github.com

## 执行上方命令后会输出
## Hi lete-fork! You've successfully authenticated, but GitHub does not provide shell access.

再次提醒:如果你现在已经切换到lete-fork账户了,关闭了Git Bash Here后重新打开Git Bash Here则会变为lete114账户.

Authorship: Lete乐特
Article Link: https://blog.imlete.cn/article/Git-Multiple-Accounts-Switch.html
Copyright: All posts on this blog are licensed under the CC BY-NC-SA 4.0 license unless otherwise stated. Please cite Lete乐特 's Blog !