a.1. 智能0d0a?为何处理回车换行一团糟?
何为0d0a(crlf),dos下的回车换行是也。由于cvs的服务器端和客户端都可能跨平台,那么我们分别来说。
* 服务器端
无论在unix上还是windows(cvsnt)的服务器,都以同样的格式保存文本文件的换行符(无论是dos的0d0a,还是unix上的0a,还是mac上的0d)。服务器端都将换行符保存为 0a。
但这并不是说在服务器端存储的文件(以 ,v结尾),不能包含字符“0d”。比如二进制文件中很多包含字符0d。文本文件也可能包含0d,但大部分包含0d的文本文件,很有可能是由于不当的跨平台使用cvs造成的。
服务器端的这种处理方法很好的适应了跨平台特性。亦即unix端服务器的repository 可以直接拷贝到windows端的repository中,vice versa。
警告
在将unix维护的服务器端,移植到windows端,我曾经遇到一个百思不得其解的问题。后来发现是由于winzip的一个古怪的缺省设置造成的:“tar file smart cr/lf conversion”!
* unix 客户端
unix上的客户端文本原样存储保存到服务器端,0d作为普通字符随文件checkin,因为 unix的默认文件换行符为 “0a”。
但是如果unix端的文件因为某种原因,如使用samba共享unix的文件系统,用windows 工具编辑,导致文件换行符变为 crlf,则在 unix 下 checkin,会将 od 随文件checkin。
* windows 客户端
windows上的客户端,具有智能crlt转换的功能,即:将文本文件中的crlf转换为lf,提交到服务器端,又可以将服务器端的lf转换为crlf。
windows上的客户端,具有智能crlt转换的功能,即:将文本文件中的crlf转换为lf,提交到服务器端,又可以将服务器端的lf转换为crlf。但是如果服务器端是crlf,则转换为crcrlf。
* wincvs 客户端的双重身份
wincvs 可以兼具 windows和unix客户端的特性。当选择选项: admin-->preferences-->globals-->checkout text files with the unix lf。则成为类似 unix 客户端的功能。
强烈建议不要选择该选项,让一个工具做它不相称的工作,出问题是迟早的事情。
* cygwin 的cvs客户端
cygwin的客户端相当于 unix 的客户端。
由于运行在windows上,可能经常提交带有 crlf 的文本文件,因此我常常用windows的客户端程序替换调 cygwin 下自带的 cvs。
* crlf引起的一团糟
client action server
============================================================
lf -- unix checkin --> lf
crlf <-- windows checkout -- lf
crlf -- unix checkin --> crlf
crcrlf <-- windows checkout -- crlf
提示 要防止混乱切记不要用unix的cvs客户端(包括cygwin的cvs客户端)checkin dos格式的文件。
来源:
阅读(3026) | 评论(0) | 转发(0) |