git多站点、多账号配置
网上一搜一堆单账号配置
当需要进行远程仓库账号区分时,例如gitee两个账号+github一个账号
共存,则需要多站点、多账号配置,多数时候只需要单账号配置,故添加单账号部分。
1.单账号仓库配置
1.1准备材料
本次配置采用gitee作为远程仓库,需要准备一个gitee账号和gitee开源仓库
# gitee开源远程仓库
git@gitee.com:JerryCousin/testGitConfig.git
#邮箱注册的gitee账号
your@email.com
1.2生成SSH秘钥
公钥将用于远程仓库,私钥用于客户端
#进入ssh目录 C:\Users\admin\.ssh\
cd ~/.ssh
#根据gitee账号生成公、私密钥
ssh-keygen -t rsa -C "your@email.com"
接下来应该会看到下面的提示:
Generating public/private rsa key pair.Enter file in which to save the key
(/c/Users/your_user_name/.ssh/id_rsa):
直接回车(你可以输入不同的名字来便于识别文件, 比如生成 Gitee 的 ssh key 可以设置为 id_rsa_gitee,如果不输入名字直接回车,会生成名为 id_rsa 的文件)
接下来的会看到:
Enter passphrase (empty for no passphrase):
直接回车,然后会看到:
Enter same passphrase again:
继续回车就行了,然后会看到:
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
SHA256:F0K/ojCbFzgMPru11m4g/9uV03oHK+U0rKBLwOOye2c xxx@xxx.com
The key's randomart image is:
+---[RSA 2048]----+
| . |
| . . |
| . . o |
| . + . . o |
| o X . S o. |
| .+.O o.o o* |
| oo=o+. .+=.+ |
| =++E. .oo+ . |
| ++.*=o. .o . |
+----[SHA256]-----+
生成完毕,生成的文件在C:\Users\admin\.ssh\下
2.将公钥粘贴至git远程仓库添加SSH密钥
a)登录gitee,点击头像下拉菜单的设置SSH秘钥
b)填写标题:随意取名
c)填写公钥:将公钥id_rsa.pub文件中的文本复制到对应文本框
d)点击确认
e)验证是否成功
$ ssh -T git@gitee.com
The authenticity of host 'gitee.com (52.74.223.119)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes # 输入 yes
Warning: Permanently added 'github.com,52.74.223.119' (RSA) to the list of known hosts.
Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access. # 成功信息
1.2 git全局设置
设置全局用户
# 设置git提交标记的用户名或昵称,可以随意设置
git config --global user.name "jerry"
# 必须设置gitee账号的关联邮箱
git config --global user.email "your@email.com"
执行命令查看是否存在全局配置:
git config --global --list
执行命令查看全局配置具体特定属性如user.name,user.email:
git config --global --get user.name
git config --global --get user.email
测试拉取远程仓库
git clone git@gitee.com:JerryCousin/testGitConfig.git
2多账号、多站点配置
多账号多站点关键在于两点:
1、~/.ssh/config文件配置,不同Host别名指向各自的站点及秘钥
2、命令行中用config配置的Host别名替代HostName
具体方式参考如下
2.1 材料准备
和单账号仓库流程相似,需要生成email对应的秘钥
站点 | 账号 | 公私钥 |
---|---|---|
gitee.com | user1@qq.com | u1_rsa、u1_rsa.pub |
gitee.com | user2@qq.com | u2_rsa、u2_rsa.pub |
github.com | user1@qq.com | u1_rsa、u1_rsa.pub(共用email,则秘钥可共用) |
2.2本地设置
配置多账号多站点,需要用到~/.ssh/config文件,若没有,则新建,内容如下
在config文件中配置不同的Host别名,命令行中用Host替代HostName,可以实现多站点多账号使用场景
# ssh远程配置文件
# Host : 别名(host和hostName均可匹配ssh命令,host匹配优先)
# HostName : 主机名(ip或域名)
# port : 默认即为22,不用写
# User : 设置默认用户名,等同于命令行中`User@`,可被命令行user@覆盖,实例见下example3
# PreferredAuthentications 强制使用Public Key验证
# IdentityFile : 指明上面User对应的identityFile路径
# IdentitiesOnly 只接受SSH key 登录
####################### 示例如下 #####################################
# example1
########## (测试连通性命令,复制后shell)ssh -T git@github.com ##########
# Host github.com
# HostName github.com
# PreferredAuthentications publickey
# IdentityFile C:\Users\admin\.ssh\u1_rsa
# example2
########## (测试连通性命令,复制后shell)ssh -T git@gitee1 ########
# Host gitee1
# HostName gitee.com
# PreferredAuthentications publickey
# IdentityFile C:\Users\admin\.ssh\id_rsa_a
# example3
########## (测试连通性命令,复制后shell)ssh -T aa.gitee.com ##########
# Host aa.gitee.com
# HostName gitee.com
# User git (命令行可不写git@host,直接写host别名,示例见上面测试连通性命令)
# PreferredAuthentications publickey
# IdentityFile C:\Users\admin\.ssh\id_rsa_b
########################################################################
# gitee user1@qq.com
#### 命令行中用u1.gitee.com替代gitee.com ######
####git clone git@u1.gitee.com:JerryCousin/testGitConfig.git ######
Host u1.gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile C:\Users\admin\.ssh\u1_rsa
# gitee user2@qq.com
#### 命令行中用u2.gitee.com替代gitee.com ######
#### git clone git@u2.gitee.com:JerryCousin/testGitConfig.git ######
Host u2.gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile C:\Users\admin\.ssh\u2_rsa
# github user1@qq.com
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile C:\Users\admin\.ssh\u1_rsa
2.3 git本地仓库配置
git 的配置分为三级别,System
—> Global
—>Local
。System 即系统级别一般(user默认为主机用户名admin),Global 为配置的全局,Local 为仓库级别,生效优先级是 Local > Global > System
以gitee.com user1@qq.com为例进行配置拉取git@gitee.com:JerryCousin/testGitConfig.git仓库代码
#### 命令行中用u1.gitee.com替代gitee.com,配置config中的设置 ######
git clone git@u1.gitee.com:JerryCousin/testGitConfig.git
#### 或直接拉取,匹配默认的id_ra秘钥,id ######
git clone git@gitee.com:JerryCousin/testGitConfig.git
在Local 仓库级别下(.git同级目录下)设置单个项目的用户
cd testGitConfig
git config --local user.name "tony"
git config --local user.email "user1@qq.com"
在项目下修改项目代码后提交,查看提交的信息即可验证
若担心混淆,不想保留全局用户,则unset清除global全局用户
git config --global --unset user.name
git config --global --unset user.email