您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
Git基础之合并解决冲突
 
   次浏览      
 2018-4-19 
 
编辑推荐:
本文来自weixin.qq.com,主要跟大家分享的是关于git代码合并的冲突问题,看看是如何解决的吧~

背景介绍

项目代码开发过程已经离不开版本控制工具,git作为一款被广泛使用的分布式版本控制系统,大家已经非常熟悉。我们在项目中使用git进行自动化测试代码管理和维护,随着自动化测试代码提交的人数增加,越来越多的问题也随之暴露出来,今天想要跟大家分享的是关于git代码合并的冲突问题。

最初自动化代码是有一个人搭建起来,后来有3个测试同事加入编写测试代码,最先遇到的问题就是多人之间的协同问题,简单的git pull和git push变得不听话起来,每次一提交代码就有代码冲突出现。下面看看我是如何解决的吧~

知识储备

要解决问题之前,先要弄清楚git合并代码做了哪些事。git拉回(pull)操作实际是有两个步骤组成,一个是获取(fetch),一个是合并(merge)操作,即:

git pull = git fetch + git merge

根据合并操作是否遇到冲突,自动合并有以下三种情况:

1修改不同的文件

2修改相同文件的不同地方

3同时修改文件名和文件内容

场景一

修改不同文件:

用户D和用户L在本地提交中修改了不同的文件,如果用户D将改动推送到服务器后,用户L再推送就会遇到非快进式推送错误。

非快进推送(non-fast-forwardupdates)错误是在远程版本库和当前版本库内容不一致时推送所致,引起原因一般为在多成员协同工作下,其他用户在当前用户版本库上次commit和本次commit之间向远程版本库执行了推送。

具体过程如下:

假如用户D修改了mock文件夹下的开屏广告.txt文件,提交并推送至远端。

同时用户L修改了mock文件夹下的原生广告.txt文件并提交。

这时用户L在push时会遇到非快进式推送错误而终止。

下面操作可以实现合并并推送。

场景二

修改相同文件的不同区域:

当用户D和L在本地提交中分别修改了feature文件夹下或者mock文件下的相同文件时仍可以提交并成功合并。具体操作同上步骤。

场景三。

同时更改文件名和文件内容:

用户D将feature文件名修改为feature1,用户L针对重命名前的feature文件进行修改,Git对于此类冲突能够很好地处理,可以自动解决冲突实现自动合并。

具体操作过程如下:

确保D用户和L用户的本地版本库和远端版本库状态一致,先分别对两个用户的本地版本库执行 $git pull 拉回操作。

用户D在自己的工作区将feature文件进行重命名,并提交推送至远端。

用户L在自己的工作区修改了feature文件,在文件的最后插入内容,并本地提交。

用户L推送合并后的本地版本库到共享版本库。

总结

代码冲突是多人协作开发过程中最常见的问题,一旦解决不好,会引发丢失代码或者业务功能异常等问题,所以在系统功能设计上,要做到功能解耦,并且不同的功能在不同的文件中实现;在开发过程中,也要养成良好的开发习惯,比如D和L都在修改feature文件或config文件,如果两人都没有定期pull代码的习惯,那么push代码时就很容易遇到冲突。所以完成一个功能或者解决一个问题及时commit & push代码,有冲突尽早解决。

   
次浏览       
相关文章

每日构建解决方案
如何制定有效的配置管理流程
配置管理主要活动及实现方法
构建管理入门
相关文档

配置管理流程
配置管理白皮书
CM09_C配置管理标准
使用SVN进行版本控制
相关课程

配置管理实践
配置管理方法、工具与应用
多层次集成配置管理
产品发布管理