Git企业开发--多人协作
文章目录
- 多人协作
- 情景一:相同分支上进行操作
- 情景二:不同分支上进行操作
很高兴和大家见面,给生活加点impetus!!开启今天的编程之路
作者:٩( ‘ω’ )و260
我的专栏:Linux,C++进阶,C++初阶,数据结构初阶,题海探骊,c语言
欢迎点赞,关注!!
多人协作
情景一:相同分支上进行操作
目的:远程仓库的代码文件要求增加"add"和"bbb"代码,分别由不同的开发人员完成,而且是在同一分支上操作。
因为两个开发人员需要使用不同的服务器,演示就利用windows和linux的shell命令行来演示两个开发人员。
经过前面的学习,需要对一些指令进行补充:
git checkout -b 本地新的分支名 远程分支名:该指令用于本地创建分支时与远程分支进行连接,为什么需要链接?前面我们提到push,pull操作是分支与分支之间的操作。
git branch --set-upstream-to=远程分支名 本地分支名:该指令与上个指令作用相同,都是建立连接,该指令用于已存在的本地分支名与远程分支名建立连接。
git branch -vv:查看本地分支与远程分支的连接状态
git branch -r:打印远程分支
git branch -a:打印本地仓库分支 + 远程仓库分支。
git fetch:拉取远程仓库分支信息
当本地分支a和远程分支a建立连接之后,在本地分支a下就可以直接使用git push 和 git pull,因为建立了链接状态,所以push或pull时知道源和目标在哪里。
windows用户准备工作:
我们在windows终端重新再来克隆一份,此时有了一个本地仓库。与远程仓库内容相同。
我们重新给我们的仓库添加用户(新建一个小号,同时在windows终端配置用户名和邮箱即可)。
接下来对该情景进行演示:
首先先创建分支dev1,在新的dev分支进行开发,开发完毕,推送到远端。
思考:为什么这两次git status的结果不同?
区别在与该dev1分支是否已经与远程仓库连接,当连接之后,才会显示本地仓库分支与远程仓库连接分支的状态,因为push是按照分支与分支关系进行,没有push,git不知道是与那个分支比较。
我们将内容提交上去,在另一个分支中,我们能够看到结果:
随后再来windows终端进行操作:
因为此时远程仓库更新,所以需要pull拉一下。
当建立连接之后,git知道是拉取远端dev1分支拉取到本地dev分支,我们直接在文件里修改,随后上传到dev1分支中。
完成文件修改之后,再来push
因为该分支已经和远端dev1分支建立连接,直接写git push的话git也知道从哪里push到哪里。
随后我们再来对master分支进行合并。合并其实有两种方案:
第一种方案:在gitee上进行合并,使用pull Request->推荐,因为该种方式需要经过测试人员审核,项目经理或老板审批之后才能够合并,更安全
第二种方案:在本地进行合并然后推送到远端。该方案就是直接合并了。
我们使用第二种方案,加深对指令的印象。
当我们再来查看master主分支的内容时,就会发现有了file.txt文件,同时还包含两行代码:
这里我想提问一个问题,如果说,当远端仓库比我们仓库更新的时候,不pull,直接写新的代码然后直接push,会发生什么?
先在windows终端修改file.txt文件,并且使得远端仓库修改,当shell终端不pull直接git push时
直接报错当前版本提交落后于远端提交,会造成合并冲突,因为在相同文件,相同分支相同位置的不同代码,肯定造成合并冲突。
因为pull = 拉取 + 合并。
手动解决冲突后,再来commit手动提交。
当开发完成后,将没用的分支再来删除掉。直接在gitee码云上对应仓库删除即可。
直接在该位置删除即可。
情景二:不同分支上进行操作
为了解决情景一遗留的问题,情景二要求在不同分支上进行操作。
目标:远程仓库分支新增function1文件和function2文件,分别完成两个功能,分别由两个开发者完成,且在不同分支下完成,即一个功能一个分支。
准备工作:肯定需要创建两个分支,有两种解决方案:
解决方案一:在gitee直接建立分支->推荐
解决方案二:在本地创建分支并推送至远端
为什么推荐一方案,因为一方案一定是基于最稳定的master主分支创建的分支,方案二要想达到,需要先pull拉取。
我们使用方案二来验证,同样的,再来熟悉一下指令:
先在远端创建好function1分支和function2分支。再来xshell端进行操作
此时本地function1分支与远端function1分支并没有建立连接,而且,本地还没有远端的分支信息(因为这个分支我是在远端创建的)。直接使用git pull指令拉取一下即可。
为什么要使用git pull指令拉取呢?
pull = 拉取 + 合并,如果拉取分支内容(即分支上的提交),需要进行分支与分支之间的连接,如果只是拉取仓库内容(即分支),不需要建立连接。
设置连接状态 + push,同时在远端查看代码
接下来在windows终端操作。
如果说我们的同时无法编辑剩余的代码,我们需要帮助他完成剩余内容的开发,此时又会演变成相同不同开发人员对相同分支的一个代码文件进行操作,和情景一相同,这里不在演示了。
接下来我们来进行合并操作。
我们将function1分支使用pull Request来进行合并,function2分支来进行本地合并并推送。
来看码云结果:
再来合并function2。
然后我们再将function2分支合并到master主分支上。
这样就完成情景二的操作了。