现在用到git的地方越来越多了,工作中公司服务器会用到,开源项目上也会用到,这就涉及到Git多账户在一台电脑上的配置和管理了。
第一步:如果第一个账户已经配置好了,跳到第二步。打开git-bash输入命令:
$ ssh-keygen -t rsa -C "youremail@yourcompany.com" -f ~/.ssh/id-rsa
接着按两个回车,最后在~/.ssh目录会生成id-rsa和id-rsa.pub两个文件,将公钥id-rsa.pub里面的内容全部复制粘贴到你账号服务器上的SSH配置中
注意:这里youremail@yourcompany.com是邮箱,即你第一个账户需要的邮箱
~/.ssh 在windows中一般是 C:\Users\当前系统用户\.ssh
第二步:生成第二个SSH KEY用于第二个账户,输入命令 :
$ ssh-keygen -t rsa -C "第二个账户的邮箱" -f~/.ssh/id-rsa2
接着后面和第一步一样
注意:这里的邮箱可以和第一步的一样,不过这里生成的两个文件是不一样,是id-rsa2和id-rsa2.pub,因为我们输入的命令后面是id-rsa2,名字可以随便定,跟其他的账户的文件名不同就行
第三步:在 ~/.ssh 目录下新建一个config文件
在config文件中添加内容如下:
#git
Host 192.28.1.81
Hostname 192.28.1.81
Port 29418
User llp
IdentityFile ~/.ssh/id_rsa
#gitlab
Host 192.28.2.2
Hostname 192.28.2.2
User llp
IdentityFile ~/.ssh/id_rsa2
注意:
Hostname是服务器地址
User是用户名
Port是端口,我这里第一个账户服务器改了默认端口
IdentityFile是对应的私钥文件名,比如我第一个账户用的id-rsa,第二个账户用的id-rsa2,如果你有第三个第四个账户,可以重复生成不同的SSH KEY,文件名不同不同,然后在config文件中进行配置
这里Host是别名,可以自定义,但要跟你项目url中的地址一致,这个很关键。比如我的项目地址是git@192.28.2.2:lululang/Messaging.git,其中192.28.2.2就是地址。在clone下的项目目录中有个.git的隐藏文件夹,其中有个config文件
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly
[remote "origin"]
url = git@192.28.2.2:lululang/Messaging.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "new"]
remote = origin
merge = refs/heads/new
上面红色字部分就写明了项目的url,git通过这个配置文件提取地址,然后在.ssh/config中找等于这个地址的Host,最终解析出真正的服务器地址Hostname和相应的用户名和rsa文件。如果需要修改Host,需要将.ssh/config和.git/config的地址都改成一样的比如Host改成lululang.com,正相应的.git/config中的url改成git@lululang.com:lululang/Messaging.git
第四步:用户名、email配置,用于提交
a)配置全局的,如果都是一个用户名和email提交的话,配置一个全局的就ok了
$ git config --global user.name "username"
$ git config --global user.email "useremail@xxx.xxx"
b)配置局部的,如果每个项目都用不同的用户名和email提交的话,就需要git然后cd到具体的项目根目录下进行配置,配置命令如下:
$ git config user.name "username"
$git config user.email "useremail@xxx.xxx"
最终是在项目根目录下的.git/config文件保存相关的配置,红色的是配置后多出来的,如下:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly
[remote "origin"]
url = git@192.28.2.2:lululang/Messaging.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "new"]
remote = origin
merge = refs/heads/new-ui
[user]
email = lululang@xxxxx.com
name = lululang