Beyond Compare问题

来源:互联网 发布:会员消费积分系统源码 编辑:程序博客网 时间:2024/05/16 11:43

使用Git、Beyond Compare遇到的一些问题

by dreamtale on Mar.02, 2012, under 工作

之前在项目中在向git提交代码的时候,由于是在Windows平台下,每次都会有一个warning:大致是说LF will be replaced by CRLF,因为当时纳品比较急,所以在确认不会有很大问题后,就没有再去追究。昨天同事在使用git的时候又遇到了同样的问题,关键是还遇到个问题导致Beyond Compare在比较本地SVN代码与git目录下代码的时候,很多source文件显示是不一样的,但是在打开之后又显示都一样。这样就很郁闷,本来想看修改文件的差异,这种情况直接就无奈了。

于是就做了一番调查。先说为什么git会报warning,普及一个知识,LF和CRLF在文本中都是代表new line的意思,只是LF用于Linux、Unix等系统下,而CRLF主要用于Windows下。而git设置里边有一个autocrlf的配置,默认情况下,他的设置是为true,你可以通过git config core.autocrlf来看你的配置。如果这个是true的话,每次在你向git本地库中添加文件的时候,都会默认的把所有的CRLF转为LF,而当你从git上checkout的时候,这些文件又会把LF转为CRLF。这个设置主要是为了支持一个项目中的跨平台开发而用的。Windows下设置为true还是比较合适的。

既然知道为什么会有waning了,那么Beyond Compare又是怎么回事?打开Beyond Compare的文件比较设置,会有一个比较的规则设定,如图

我刚好选择了Binary comparison,这就是导致问题的原因,由于在不同系统下表示new line的方式不同,这样就势必导致文件的二进制会不一样,所以自然也就会显示文件不一样了。为了证实二进制不一样,我用Beyond Compare的Hex viewer比较了一下两个内容相同的文件:


图中的0D表示CR,OA表示LF,细心的同学还会看到这两个文件大小也明显不一样,用CRLF表示new line的文件要比只用LF表示的大一些。

那么如何来解决这个问题呢,尝试之后,选择Rules-based comparison这个选项就可以了,具体是基于什么base rule,我并没有找到,可能是基于文本Content的比较吧。

另外一个比较选项是CRC校验,Beyond Compare官方博客并不推荐使用这种方式,一般情况下,完全可以用Binary comparison代替CRC,因为Binary comparison是一边读文件一边比较,一旦发现不同的时候,就停止读文件了。而CRC需要通过读取整个文件来计算校验值。那么CRC comparison在什么时候用呢,主要是在两个地方,一个是snapshot,因为它本身不是拥有所有的文件,这时候可以把CRC存进去,来进行比较,另一个是FTP,当本地文件与远程FTP文件比较的时候,并不需要将远程文件整个下载下来,再进行比较,只需要远程的FTP server计算出一个文件的CRC,传递会本地与本地文件的CRC比较就可以了。

0 0
原创粉丝点击