在处理这个问题之前,查询了一些资料,当时只是单纯的认为几句代码就搞定了,不过,在实践的过程中碰了一鼻子灰,经过努力,配置成功之后,总结如下实现步骤(我的电脑是先配置的公司gitlab,后配置的个人github).
1: 刚开始的时候,我是根据在Mac下创建github并上传本地代码的思路去操作的,具体代码如下:
//初始化本地仓库
git init
//将代码放到提交区
git add .
//提交到要本地仓库
git commit -am “first commit”
//关联远程仓库并建了一个名叫:originMine的别名
git remote add originMine git@github.com:FuDong/test.git
如果只是一台电脑只存在一个github账户,上面的简单几步是没有问题的,不过一台电脑两个github账户共存,在git push的时候,就会犯难了,到底是传到哪个账户???
2: 重新设置一个公司gitlab的账户信息(这一步参考用的,可以不用重新配置)
git config --global user.name "gitlab用户名"
git config --global user.email "gitlab邮箱"
3: 每个账户, 我都是通过关联ssh key来操作的, 公司账户之前配置过了,具体方法如下.
ssh-keygen -t rsa -C "公司的gitlab账户"
但是为了区分两个账户的ssh key,不覆盖之前的id_rsa,所以给个人账户的ssh key 重新起了个名字
ssh-keygen -t rsa -C "个人的github邮箱" -f ~/.ssh/github_rsa
//进入ssh文件目录
StafftekiiMac:~ Staff$ cd ~/.ssh
//配置的ssh key文件
StafftekiiMac:.ssh Staff$ ls
config github_rsa.pub id_rsa.pub
github_rsa id_rsa known_hosts
//拷贝密钥
StafftekiiMac:.ssh Staff$ cat github_rsa.pub
ssh-rsa AAAT0sty7U9uueyjumof2HJYZp7NeBCz2TBQ4z4NM5kE9XB 1341499999@qq.com
拿到密钥ssh key之后,拷贝到自己的github账户进行配置
4: 在ssh文件目录下,会自动生成一个config目录(.ssh/config),进行配置:
可以通过vi .ssh/config的方式进行编辑,也可以直接右键进入文本编辑
Host gitlab
HostName github.lab //公司的代码仓库服务器地址
User 用户名称
IdentityFile ~/.ssh/id_rsa
Host github.com //个人的代码仓库服务器地址
HostName github.com
User 用户名称
IdentityFile ~/.ssh/github_rsa
如果不知道仓库服务器地址,可参考下图红框部分
5: 配置到这一步的时候,可以测试一下ssh 是否连通了
StafftekiiMac:~ Staff$ ssh -T git@github.lab
Welcome to GitLab, 用户名!
StafftekiiMac:~ Staff$ ssh -T git@github.com
Hi 用户名! You've successfully authenticated, but GitHub does not provide shell access.
6: 进一步的配置步骤
StafftekiiMac:test Staff$ git init
StafftekiiMac:test Staff$ git commit -am 'first commit'
StafftekiiMac:test Staff$ git status
StafftekiiMac:test Staff$ git remote add origin git@github.com:用户名/test.git
StafftekiiMac:test Staff$ git push -u origin master
到这一步的时候,出现如下问题
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@github.com:用户名/test.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
解决方法:
1: 进行push前先将远程仓库pull到本地仓库
$ git pull origin master //git pull --rebase origin master
$ git push -u origin master
2: 强制push本地仓库到远程 (这种情况不会进行merge, 强制push后远程文件可能会丢失 不建议使用此方法)
$ git push -u origin master -f
3: 避开解决冲突, 将本地文件暂时提交到远程新建的分支中
$ git branch [name]
# 创建完branch后, 再进行push
$ git push -u origin [name]
通过上面的步骤,当我们再次刷新github界面的时候,本地代码就上传成功了