(2018.12.29 更新,增加Git处理方式)
在计算机的技术中,所有文本信息都会涉及换行的问题。例如,你在键盘上敲击一次Enter(回车)键,系统将在文本重增加一行,实际上系统已经在文件中插入了一个不可见的换行标记。
换行,在许多地方也称为行尾(line ending),或者EOL(end of line)。换行是一个特殊的字符,在文本中用于表示一行文字信息的结束,或者新一行文字信息的开始。由于在不同的平台或操作系统中,系统处理换行的方式不一样,如果开发人员忽略换行问题,会导致源代码编译或者运行过程中出现异常的问题。
下面我们结合TFS系统的源代码管理功能,具体分析在代码管理过程中,如何处理文件换行的问题。
换行类型CRLF, CR, LF
最早在电传打印机上,工程师使用CR(Unicode字符为000D)和LF(Unicode字符为000A)标记打印换行。CR是单词Cartridge Return的缩写,我们经常称为回车;LF是单词Line Feed的简称,我们经常称为换行。这两个字符分别用来指挥打印机的针头移到下一行,同时将打印纸张先前推进一行。后来由于计算机技术的飞速发展,计算机与打印机高度集成,打印换行的概论也被计算机广泛引用。但是,不同的操作系统,对于换行的处理方式不一样。
- 微软 Windows:CRLF
微软基本原样照搬了早期打印机的机制,使用两个字符CR+LF来标记文件的换行。Windows,MS-DOS,PC-DOS等采用了CRLF的换行方式。
- Unix/Linux:LF
Unix操作系统觉得微软比较浪费,在自己的系统中,一个字符LF就可以达到目的,于是Linux上面就使用LF来标记换行。基于Linux的其他操作系统,基本都采用了LF的换行方式。
- 苹果 Mac
苹果的计算机的科学家由于更为复杂的原因,定义CR作为换行标记。
TFVC处理方式
在TFVC代码库中,无论从使用哪种客户端签入签出,TFS服务器都会原样保留文件的换行模式。
你可以在文本编辑工具中验证从TFS中下载的文件,如下图,我使用EditPlush验证一个sh脚本程序的换行格式:
Figure 1 - 在EditPlush中查询文件的换行格式