cvs与svn的二进制处理与行结束转化

本文探讨了在Windows与Linux环境下使用CVS进行跨平台文件版本控制时遇到的行尾符号处理问题,特别是在Makefile这类敏感文件中。CVS默认将所有文件视为文本文件并在不同操作系统间转换时修改行尾符号,导致Win32系统上检查出的文件末尾出现额外的字符。Subversion通过自动检测二进制文件及保留原始行尾的方式解决了这一问题。

最近发现有种情况可以造成cvs上checkout出来的文件错误:
1,win32下编辑文本格式文件并保存
2,,,,传到linux机器上commit进cvs
3,回到win32机器上checkout,用vim打开所有行尾都多了一个^M
这个文件如果是makefile将不被make所接受(javac可以忽略这个错误)
而subversion没有这样的问题。

问题出在cvs对于文件的处理方式上
cvs默认所有文件为文本格式,如果是二进制文件需要用-kb指定
作为文本文件处理时cvs会将换行解释成自己的lineseparator
win32文件的换行符/r/n,放到linux上commit,cvs认为linux的换行符是/n,于是将/n转换成lineseparator储存,这样再从win32系统上checkout,cvs又将lineseparator解释成/r/n于是行尾全部变成/r/r/n

而subversion先进的地方在于
1,采用了一种二进制文件判断算法,自动判别是否二进制文件
2,基于1的算法,并不在传输与储存时改变文件,而是在属性文件中保存文件的状态。
在.svn-base文件中你可能会发现svn:mime-type这样一个属性,这就表示这是一个binary文件。而在存储的时候所有文件都是用byte code方式压缩存储。因此也就没有行尾处理的问题。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值