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格式的文件。
来源:
阅读(3057) | 评论(0) | 转发(0) |