文章目录

Windows环境下Git和TortoiseGit搭配使用比较多。TortoiseGit大部分功能简洁实用,唯一不爽的是merge解决冲突的时候。TortoiseGit用于diff和merge使用的工具叫TortoiseMerge,其diff功能中规中矩,用起来也挺方便。但其merge功能三方比较解决冲突很不好用,特别是冲突区两边的修改是交错的时候。如下图:
图1 TotoiseMerge界面.png

好在TortoiseGit可以设置外置diff和merge工具。我选的是DiffMerge,因为它是跨平台的,以前在linux用过,懒得换其它的了。
设置diff工具如下图所示:
图2_设置Diff工具.png

其中命令行如下:
C:\Program Files\SourceGear\Common\DiffMerge\sgdm.exe %base %mine
设置merge工具如下图所示:
图3_设置Merge工具.png

其中命令行如下:
C:\Program Files\SourceGear\Common\DiffMerge\sgdm.exe /merge /result=%merged %mine %base %theirs
关于命令行参数,上图设置界面里点帮助就有介绍,还有几种Merge工具的示例,没写DiffMerge的。与differge的帮助文档中相关章节对照一下就可以搞定。喜欢深究的可以去看看文档,DiffMerge的在Command Line Arguments/ Opening a Merge Window章节。
DiffMerge的diff功能与TortoiseMerge差不多,不用介绍了,只介绍一下merge功能。在commit窗口双击有冲突的文件时,会打开设置好的DiffMerge,同时弹出一个统计表窗口:
图4 Diffmerge统计数据.png
主窗口如下图所示。其中左边LOCAL代表merge之前的工作分支; 右边REMOTE代表merge来源分支; 中间虽然写的是BASE,实际指的是合并的结果。
图5 DiffMege界面.png
冲突的地方划成了几个小块,点中一块就会用虚线框起来,点右键可以选择你打算怎么处理。上图的例子,当前小块自动合并时取了右边,可以选择用左边替换(Replace),左边添加到前面(Prepend),左边添加到后边(Append),或者自己复制一段正确的代码粘贴(Paste)到这。再看下面一段红色标记的两边各不相同的,右键菜单也有不同解决方法让你选。
DiffMerge里中文可能会显示乱码,点击菜单Tool/Option,设置RuleSets:
图6 设置RulesSet.png
选中源代码语言,点Edit,在Character Encodings里选择系统默认,或明确指定所有的编码:
图7_设置中文字符编码.png
其它独立的Merge工具没试过,只要比TortoiseMerge好用就行了。顺便说一句比较喜欢SmartGit的内置Merge功能,如下图:
图8 SmartGit界面.png
那个动态连接线看起来比较酷,操作也比较简单,点击双箭头就可以选择复制或替换的方向。TortoiseGit上手比较简单,SmartGit功能强大,但需要对Git有很多的了解才好上手,各取所需吧。

文章目录