多个托管平台GIt账户如何配置
通常情况,公司会搭建自己的gitlab代码托管服务或者将代码托管到第三方平台上,而我们自己的开源项目通常托管到Github上,每个托管平台都有对应的Git账户。默认情况下,一台电脑对应一个GIt账户,这时候对不同托管平台上代码仓库的管理就变得很不方便。接下来我将会以两个账号为例,进行相应的配置,以达到对不同托管平台上的仓库进行丝滑的操作。
SSH 路由配置
首先,通常我们会在GIt上配置SSH Key,使用SSH地址代替HTTP地址,这样在下载或上传代码时就不需要输入账号密码了。那么多个托管平台呢?一种方式是全都使用同一个公私钥对,但是这样不是很安全,一个私钥不小心泄漏了,全部平台上的账号都将面临安全风险。一种更好的方式是为不同的账号配置不同的秘钥对,再修改$HOME/.ssh/config
文件配置相应的ssh路由策略:
Host github.com
Port 22
User git
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_rsa
Host 192.168.10.136
Port 22
User git
HostName 192.168.10.136
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_home
上面的配置文件中,第一项是配置github的,IdentityFile
是你存放私钥的文件路径。
第二项是我在内网搭建的gitlab服务,下面解释一下
- Host:是你GIt的外部访问地址,可以是ip也可以是域名。
- HosName:是你真实访问的服务地址。
对于Host如果不清楚的话,可以进到你随便的一个仓库下,输入git config --local -l
查看下仓库的配置,找到这一项:remote.origin.url=ssh://git@192.168.10.136:22/mytest.git
,可以看到这个ip是和Host里面对应的,你也可以更改仓库的origin,将这个ip改成任意一个你喜欢的,只要和上述配置中的Host对应就行。
验证
使用ssh -T
验证下是否配置成功:
ssh -T github.com
ssh -T 192.168.10.136
如果配置成功则会返回类似如下信息:
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
用户名邮箱配置
ssh key已经配置好了,接下来我们clone了代码,实现了一段新的功能需要push到远程仓库,一般来说我们会在全局配置项添加用户和邮箱:
git config --global user.email “you@example.com”
git config --global user.name “Your Name”
但是,在公司的仓库你可能使用自己真实的名字和工作邮箱,在github可能使用的是昵称和私有的个人邮箱。一种方式是你可以在每个仓库下分别设置local级别的配置来分别设置名称和邮箱。但是这样太麻烦,更方便的做法是根据托管服务分别适配,修改$HOME/.gitconfig
文件,添加如下配置:
[includeIf "hasconfig:remote.*.url:git@192.168.10.136:*/**"]
path = ~/.gitconfig.gitlab
[includeIf "hasconfig:remote.*.url:git@github.com:*/**"]
path = ~/.gitconfig.github
在~/.gitconfig.github
和 ~/.gitconfig.gitlab
文件中分别配置:
[user]
name = yourname
email = yourname@xxxx.com
这样github会使用~/.gitconfig.github
的配置,而私有gitlab则会使用~/.gitconfig.gitlab
中的配置。
另外,如果是使用http的话这样配:
[includeIf "hasconfig:remote.*.url:http://192.168.10.136:80/**"]
path = ~/.gitconfig.gitlab
验证
分别进到不用托管平台下的代码仓库中,查看local的git配置,看看是否和配置文件中的一致:
git config user.name
git config user.email