2011-08-16 28 views
1

我们主要在Windows环境下开发我们的PHP应用程序,并在PC/ANSI中存储我们的文本源文件。什么编码用于跨平台开发(PC,Macs,Linux)?

但是现在,一位开发人员加入我们,他们使用Mac平台,我们遇到了在他的机器上创建“补丁”的问题。当他进行任何更改和作用:

svn diff > patchfile.patch 

他生成补丁文件,指示该源代码文件的每一条线路已被修改(这显然原位缺口的情况下)。

我想保存测试ANSI文件:

PC/UTF-8 (using UTFCast Express which I writes the BOM by default) 
PC/UTF-8 (using Notepad++ "Encoding > Convert to UTF-8" - which writes the BOM) 

除了:

PC/UTF-8 (using Notepad++ "Encoding > Convert to UTF-8 without BOM") 
PC/UTF-8 (using Notepad++ "Encoding > Encode in UTF-8 without BOM") 

对于所有这些情况,每当他做的改变,并做一个SVN差异>补丁文件。补丁,它会输出所有行,就好像所有的行都被改变了一样!

[我们试图做“SVN差异-x -p> patchfile.patch”在过去的3,以及 - 没有区别]

顺便提及,在最后两个选项生成的文件继续显示为ANSI在我的PC机器上。两者似乎根本没有修改该文件,并且在DOS提示符下执行'fc'(文件比较)没有发现任何区别。

我应该使用哪种编码进行跨平台开发?

回答

5

不是字符编码问题,而是行结束问题。 Windows使用CR-LF(13/10),Mac现在仅使用(unix风格)LF(10)。

在相关文件中设置颠覆属性svn:eol-style = native使其正常工作。

+0

hi davmac - 是在SVN客户端还是在服务器上设置的?我如何设置它为整个SVN存储库使用'本机'编码的一切? – siliconpi

+0

您在客户端设置属性,然后将其提交到存储库。请参阅http://subversion.apache.org/faq.html#auto-props和http://svnbook.red-bean.com/en/1.6/svn.advanced.props。html(尤其是在“自动属性设置”下) – davmac

0

Windows使用使用“\ r \ n”(换行符/回车)行结束。

OS/X使用unix“\ n”字符。

先前使用OS9“\ r”。

我不确定为什么要为源代码使用UTF-8字符编码,除非您一直在为所有文件做这些事情,特别是如果您是所有项目的英语演讲者。

你的Mac开发者应该尝试设置他的编辑器来使用PC行尾,以便与其他人兼容。通常,编辑人员会检测正确的行尾,并为现有文件使用正确的行尾,但对于新创建的文件,可能会将其设置为使用其默认操作系统。

您可以尝试使用flip这是一个跨平台的命令行工具,可将行结束字符从一个os转换为另一个os。

+0

如果找到了错误的行结束符,你也可以设置svn在后提交钩子中运行翻转,但是你要小心,不要让它运行在二进制文件可能会破坏它们。 – gview

+0

我们将在我们的源代码中使用特殊的“扩展”字符集,并最终。 – siliconpi