1、远程(多人)协作【下】
1.1 本地开发
模拟2个用户(开发者), 开发一个项目
第一个是:
odshen1
开发者
第二个是:odshen2
开发者
图片:
蓝色背景是odshen1
,粉红色背景是odshen2
,黑色背景是远程公共版本库zhangsan
注意:接着
【学习:git使用一】 最后克隆到本地版本库目录 shop 和 othershop
2、在shop下创建 odshen1 开发者,和other下创建 odshen2开发者
shop目录下
> git config --local user.name "odshen1"
> git config --local user.email"odshen1@163.com"
othershop目录下
> git config --local user.name "odshen2"
> git config --local user.email"odshen2@163.com"
3、odshen1 本地开发在shop下编辑开发代码,然后提交版本(本地编写代码,本地版本库提交)
![]()
此时odshen1的提交版本与远程版本库 zhangsan 毫无关系
4、odshen2 本地开发在othershop下编辑开发代码,然后提交版本(本地编写代码,本地版本库提交)
![]()
此时odshen2 的提交的版本与远程版本库 zhangsan 也毫无关系
此时 odshen1 和 odshen2 也没有联系
1.2 推送到远程(公共版本库) git push
5、odshen1 在shop下开始推送代码到远程公共版本库 zhangsan
> git push origin master
![]()
远程版本库zhangsan收到odshen1
提交的代码
1.3 从远程(公共版本库)拉取 git pull
6、odshen2 在othershop下先拉取再推送代码到远程公共版本库 zhangsan
> git pull
// 语法
[odshen2
后于odshen1
开发完成, 此时odshen1
已经将代码推送到远程公共版本库) ]
odshen2 该怎么做?
因为此时远程已经出现了odshen2
不确定的内容(odshen1
推送的代码)
做法:1、odshen2
先将远程代码拉取到本地,与odshen2
的本地代码合并后
2、odshen2
再去推送
注意:
git 会自动完成合并,前提是没有解决不了的冲突;合并后会形成一个新的版本,提供vim
去编写版本描述
正常情况
> git pull
之后拉取文件,git自动合并,弹出一个vim
编辑框,编辑合并版本信息
错误情况
> git pull
之后报错,表示拒绝合并不相关的历史
![]()
解决办法:
> git pull --allow-unrelated-histories
![]()
就可以弹出vim
编辑器编辑合并版本信息 –编辑版本描述后,保存退出 :wq , 即可自动提交一个自动合并的版本
![]()
![]()
7、 odshen2 再推送到远程
![]()
去远程版本库 zhangsan 查看 git log ,与最后推送的版本保持一致
1.4 手动解决冲突
场景:
odshen1
先编辑并上传一份代码到远程公共版本库(如:config.php),odshen2
也编辑一份相同文件名的代码,将要上传(如:config.php)
问题来了?
odshen2
从远程版本库拉取代码(此时odshen1
的 config.php已经上传),进行本地合并,但是出现 相同的 config.php 文件内容冲突不一致
怎么解决?
odshen2
进行 > vim config.php
文件,找到 git 给出冲突地方相应的版本号,odshen2
拿着该版本号去远程公共版本库服务器确认另外一个开发者(查出是odshen1
),然后协商最终代码, odshen2
再把最终代码编辑完成然后上传到远程版本库
以上场景实现如下
# odshen1 开发
odshen1
编辑提交 config.php代码到远程版本库
![]()
![]()
推送到远程, 推送前先拉取, 自动解决冲突合并
![]()
此时远程版本库
# odshen2 开发
odshen2
也编辑同样的 config.php文件
![]()
拉取, 此时远程config.php 与本地config.php发生冲突, 不能自动完成
![]()
需要手动解决冲突!
编辑 config.php
![]()
![]()
拿着冲突版本号去远程版本库查询该冲突向外一位开发者是谁,然后协商解决!
额外提示!!! 如果vim下鼠标不能右击复制 ,在普通模式下键入:set mouse-=a【不包括引号)】
![]()
![]()
![]()
odshen2 推送到远程
> git push origin master
查看远程版本库log