关于跨平台下end-of-line问题

因为项目需要,同时开发了Linux/Windows版本的程序,后面在实际测试过程中,发现两个版本之间的体现出来的行为有些不一致,大致情况如下:

1、Linux下代码能编译通过,Windows下编译通过

2、Linux下程序功能正常,Linux程序功能不正确

#配置库使用svn,两个系统使用同一份代码

 

后面经过逐步定位,发现问题出现在中文注释上,再进一步发现时跨平台下end-of-line解释不同造成

实际上,在不同系统下,行尾符的解释不同:

如:Unix每行结尾为’\n‘,Windows系统每行结尾是“\r\n”, Mac系统每行结尾是'\r'

 

由上可知,Linux下的eol在Windows下会解释为回车+换行,而在Linux下只会是换行

为了解决此问题,svn 专门提供了一个 svn:eol-style 这个 property。只要将 svn:eol-style 设置为 native,每次 checkout,svn 会自动将 eol 转换为当前系统的默认格式

具体命令为:svn propset svn:eol-style native file/dir [-R 递归]

 

另外Linux下也提供了两个命令来解决这个问题:dos2unix + unix2dos,使用都很简单,具体可参考man描述

 

posted on 2014-08-17 17:15  沈融  阅读(861)  评论(0编辑  收藏  举报