2011-08-16 57 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