主要讲解如何使用IntelliJ IDEA开发工具提供的Git图形化工具来解决代码冲突问题。
学习本节课程之前,建议先学习在IntelliJ IDEA中使用Git提交代码,因为本节课会有提交代码的操作。
下面是录制的视频课程,时长约12分钟,建议在wifi环境下观看:
不方便观看视频的网友,也可以阅读下面的文章,和视频内容基本一致:
01
—
什么情况下会出现代码冲突?
一般在企业中,都是通过团队协作的方式来开发一个项目,每个人都在编写代码或者修改代码,都会向Git服务器提交代码,如果多个人修改了同一个文件,或者修改了同一处代码,导致同一个文件中被修改的代码相互交错,交织在一起,这个时候,你在向git服务器提交代码的时候,就很容易出现和别人提交的代码产生冲突的情况,git不知道该保留哪些代码,也不知道该舍弃哪些代码,只能由开发人员手动处理冲突。
为了尽量避免代码冲突,通常采用如下办法(个人建议,仅供参考):
(1)分工明确,尽量各改各的代码,不要出现多个人修改同一处代码的情况;
(2)在修改代码前,先获取最新代码;
(3)尽量小批量地修改和提交代码,避免一次性修改很多处代码然后一起提交;
(4)早上到公司第一件事就是获取最新代码,晚上下班前记得提交代码;
IntelliJ IDEA这款开发工具,提供了Git的一些图形化操作,能够帮助开发人员非常方便的处理这种代码冲突的情况。
02
—
模拟代码冲突
下面我们还是以github上的名为 xbs-springboot-maven-jar的maven工程为例来讲解,大家可以从以下网址将工程导入到自己的IDEA开发工具中:
https://github.com/xuebus/xbs-springboot-maven-jar
假设有两个用户,A用户使用IntelliJ IDEA开发工具来修改代码并提交到github服务器,而B用户直接登录github服务器来修改同一个文件中的代码并提交,通过这种方式来模拟多个用户同时修改同一个文件导致的代码冲突的情况。比如这里都以修改RedisController.java文件为例来说明,该类中共有4个方法,主要是对redis进行增删改查的操作,每个方法中都有一行logger.info()的代码来记录日志的操作。
首先,B用户登录github网站,将RedisController.java中的4个方法中的记录log日志的那一行代码都删除:
然后,B用户提交了修改操作:
然后A用户在IntelliJ IDEA开发工具中,对RedisController.java文件中的4个方法都做这样的操作,就是将如下两行代码合并成一行(记录日志的那一行代码保持不动):
ValueOperations ops =redisTemplate.opsForValue();
ops.set(key,jsonString);
logger.info("==================设置缓存:key={}, value={}",key,jsonString);
也就是将上面第2行中的变量ops用第一行进行替换,即:
redisTemplate.opsForValue().set(key,jsonString);
logger.info("==================设置缓存:key={}, value={}",key,jsonString);
A用户提交代码:
但是,当A用户push的时候,弹出如下提示:
同时也还会发现本地代码中已经被标记出来那些产生冲突的代码的位置:
这是一个3栏式窗口,最左侧和最右侧的窗口中的代码是只读的,不能修改,中间窗口中的代码是可以随意进行修改的。最左侧窗口是本地修改后的代码,中间窗口是本地修改前的代码,最右侧窗口是git服务器上的代码。开发人员可以根据左右两个窗口中的代码情况,自己决定要保留哪些代码,或者舍弃哪些代码。通过点击"》"按钮可以将左侧的代码覆盖到中间窗口,表示保留左侧窗口中的代码;同理,通过点击"《"按钮可以将右侧窗口中的代码覆盖到中间窗口,表示保留右侧窗口中的代码。比如我们想保留左右两侧窗口的修改,可以直接在中间窗口中进行编辑,最终要提交的代码如下图所示:
右下角提示push被拒绝,这是因为冲突只是在Commit阶段解决了,需要再push一次:
再次执行push命令:
点击"Push":
代码push成功:
到github上面看一下吧,两行代码被改成了一行(A用户的代码),同时记录日志的代码也没有了(B用户的代码),说明冲突已经解决了:
(结束)
领取专属 10元无门槛券
私享最新 技术干货