前言

使用 git merge 命令合并代码的时候可能会产生文件冲突,产生这种冲突的根本原因是文件的同一处同时被多次修改,这种同时修改常体现的不同分支上,当多个分支修改了同一处代码,再合并代码的时候就会产生冲突,因为 git 程序也不知道我们想要保留哪一份修改,这时就需要我们手动修改产生冲突的文件。

当冲突内容很少的时候我们可以打开文本编辑器,找到 >>>>>>>>>>>>===========<<<<<<<<<<<< 这三行字符包裹的内容就是需要解决冲突的部分,但是当冲突内容特别多时我们还是习惯于通过可视化的工具来处理,Beyond Compare 就是这样一款工具,可以用来比较不同的文本文件、表格文件,还可以比较文件夹内容,之前用着比较习惯,所以在处理 git 冲突的时候也想使用这个工具来做,通过查找技术文档发现了下面的方法。

BEYOND COMPARE

这是一款强大的比较工具,前面提到它可以比较文本、比较表格、比较文件夹,但是它的能力不仅限于此,它甚至可以比较MP3、比较图片、比较注册表,我们的目的是调用它的比较功能,但是前提是这款软件允许你调用,如果它不给你提供接口,你就是想调用也得绕上八百个圈才可以。

这一点我们可以查询文档确定,文档是安装软件时自带的,名字为 BCompare.chm,如果找不到,安利你一个叫做 Everything 的软件,装上它以后,电脑中的一切东西都能搜索找到。

这个文档应该很容易找到的,与软件的可执行文件在同一目录,其实我们使用的比较工具应该是 BCompare.exe,但是为什么在配置 git mergetool 的是后用的是 BComp.exe 呢?这一点文档中有写:

BCompare.exe: This is the main application. Only one copy will run at a time, regardless of how many windows you have open. If you launch a second copy it will tell the existing copy to start a comparison and exit immediately.
BComp.exe: This is a Win32 GUI program. If launched from a version control system, it should work just fine. If launched from a console window, the console (or batch file) will not wait for it.

文档是英文的,但是比较容易理解,总的来说 BCompare.exe 是主程序,BComp.exe 用在版本控制工具中更加优秀,至于文档中提到的主程序只能启动一个副本的说明,我试了一下并不是这样的,但是这不是重点,根据文档建议,我们应该调用 BComp.exe 程序。

关于调用参数,文档中对于每种形式的比较也给出了说明,我们这里只列举两个文件和四个文件这两种参数,两个文件作为参数时常用来对比,我直接使用主程序对比文件就是这种形式,参数格式为 BCompare.exe “C:\Left File.ext” “C:\Right File.ext”,但是使用时我常把文件直接拖拽到软件上进行比较。四个文件作为参数时常用来处理文件冲突,参数类型为 BCompare.exe C:\Left.ext C:\Right.ext C:\Center.ext C:\Output.ext,参数中文件的名字表明处理时的位置和作用,看下面这个图就明白了。

文件冲突的处理

  1. 我们在dev的a.txt文件中添加“dev”内容,在master分支上添加“master”内容,然后用master分支合并dev。

  2. 使用mergetool指令调用Beyond Compare合并冲突:

  3. 使用mergetool指令调用Beyond Compare合并冲突:
    处理冲突策略: 由上图可以看出,左边是当前分支的版本,右边的是需要合并的分支的版本,中间的是相同部分的版本,处理冲突的策略大概有以下几种:

1 当前分支版本替换合并分支版本,点击绿色的箭头。
2 合并分支版本替换当前分支版本,点击粉色的箭头。
3 同时需要两个版本的内容,点击绿色或粉色的箭头,然后把另外的分支的内容拷贝!!!到下方的文本编辑框。
4 只要相同部分的内容,什么都不干。
5 其他。

最后,点击红色的感叹号,表示已解决冲突。我这里选择 【#3】的策略:

最后,点击红色的感叹号,表示已解决冲突。我这里选择 【#3】的策略

关闭Beyond Compare,完成合并操作。