1、远程(多人)协作【下】

1.1 本地开发

模拟2个用户(开发者), 开发一个项目

第一个是:odshen1 开发者
第二个是:odshen2 开发者
图片: 蓝色背景是 odshen1,粉红色背景是 odshen2 ,黑色背景是远程公共版本库 zhangsan

注意:接着【学习:git使用一】 最后克隆到本地版本库目录 shop 和 othershop
【学习:git使用二】
2、在shop下创建 odshen1 开发者,和other下创建 odshen2开发者

shop目录下

> git config --local user.name "odshen1"
> git config --local user.email"[email protected]"
othershop目录下
> git config --local user.name "odshen2"
> git config --local user.email"[email protected]"

3、odshen1 本地开发在shop下编辑开发代码,然后提交版本(本地编写代码,本地版本库提交)

【学习:git使用二】
此时odshen1的提交版本与远程版本库 zhangsan 毫无关系

4、odshen2 本地开发在othershop下编辑开发代码,然后提交版本(本地编写代码,本地版本库提交)

【学习:git使用二】
此时odshen2 的提交的版本与远程版本库 zhangsan 也毫无关系
此时 odshen1 和 odshen2 也没有联系

1.2 推送到远程(公共版本库) git push

5、odshen1 在shop下开始推送代码到远程公共版本库 zhangsan
> git push origin master
【学习:git使用二】
远程版本库zhangsan收到 odshen1 提交的代码
【学习:git使用二】

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使用二】
解决办法:
> git pull --allow-unrelated-histories
【学习:git使用二】
就可以弹出vim编辑器编辑合并版本信息 – 编辑版本描述后,保存退出 :wq , 即可自动提交一个自动合并的版本
【学习:git使用二】
【学习:git使用二】
【学习:git使用二】

7、 odshen2 再推送到远程

【学习:git使用二】
去远程版本库 zhangsan 查看 git log ,与最后推送的版本保持一致
【学习:git使用二】

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代码到远程版本库
【学习:git使用二】
【学习:git使用二】
推送到远程, 推送前先拉取, 自动解决冲突合并
【学习:git使用二】
此时远程版本库
【学习:git使用二】

# odshen2 开发
odshen2也编辑同样的 config.php文件

【学习:git使用二】
拉取, 此时远程config.php 与本地config.php发生冲突, 不能自动完成
【学习:git使用二】
需要手动解决冲突!
编辑 config.php
【学习:git使用二】
【学习:git使用二】
拿着冲突版本号去远程版本库查询该冲突向外一位开发者是谁,然后协商解决!
额外提示!!! 如果vim下鼠标不能右击复制 ,在普通模式下键入:set mouse-=a【不包括引号)】
【学习:git使用二】
【学习:git使用二】
【学习:git使用二】
odshen2 推送到远程
> git push origin master

查看远程版本库log
【学习:git使用二】

相关文章: