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"[email protected]"othershop目录下> git config --local user.name "odshen2"> git config --local user.email"[email protected]"
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