cygwin下配置git-difftool
beyond compare3
比较功能很好用,如何将bc3配置成git difftool,使得用git difftool可以通过bc3的选项卡同时打开两个版本所有不同文件。以下是我的配置过程。
在~/.gitconfig中配置如下
|
|
以上配置网上都能找到,最后一行命令是打开bc3并传递两个待比较文件的地址。
实际使用过程中有如下问题:
- 路径出错,cygpath -w $LOCAL 并未执行
- 执行git difftool命令过程是比较两个git版本库异同,git会对每一对待比较文件调用一次cmd命令,将每一对待比较文件的地址$LOCAL和$REMOTE传递给bc3,命令执行完毕后删除这两个临时文件(如果两个都是临时文件的话),再进行下一次的cmd调用。这样会造成比较时无法用bc3观看两个版本库所有文件的不同,而只能一对对文件看,看完一个关闭这个才能看下个。
解决方法: 使用脚本解决,cmd可以换成自己的脚本,这样就能自定义控制比较过程,处理路径问题了。 将上文配置的cmd一行改为:
|
|
脚本代码如下:
|
|
脚本将生成的临时文件拷贝至git_tmp目录,临时文件在git调用下一次cmd前被git删除但是已被拷贝至新文件夹,随后开始用bc3进行diff比较,这样每一对文件都能出现在bc3的选项卡中,就能看到两个版本所有文件的不同了。
副作用就是git_tmp文件夹文件会越来越多,需要手动清除,如果git difftool能像awk一样能设置开始动作和结束动作就好了,但是官方文档中没有查到这个功能。
当然不要忘记bc3要设置成选项卡模式,脚本git-diff-tool.sh要设环境变量或者加绝对路径。
git官方文档地址: http://www.kernel.org/pub/software/scm/git/docs/git-difftool.html