Wednesday, January 4, 2012

svn windows/linux 跨平台開發設定

當 svn 的使用者使用不同的系統的時候,不同系統換行符號的差異(windows 為 “\r\n” 即 CRLF、linux/unix 為 “\n” 即 LF)可能會造成一些問題。

譬如要進行 patch 的時候,可能會因為換行符號的差異,造成 patch 失敗。當遇到這問題的時候,是可以用 dos2unix 或 unix2dos 先把 working copy 要 apply patch 的檔案先行轉換成與 patch 相同 eol 的格式再 patch,但是這樣還是十分麻煩。

事實上,為了解決這樣的問題,svn 可以透過設定 svn:eol-style 來解決這個問題。只要 svn 控管下的檔案其 svn:eol-style 屬性設為 “native”,在 checkout 該檔案時,svn 就會自動將檔案的換行符號轉換為該 svn 執行系統下的預設換行符號了。

要對特定檔案設定此屬性可以執行:

svn propset svn:eol-style “native” file

如果要設定所有檔案,可以用 -R 參數加上 * 萬用字元:

svn propset svn:eol-style “native” -R *

不過若只想設定特定檔案類型, -R 參數會有些問題,可以參考這篇 Recursive svn propset 。 

設定完所有檔案之後,需要重新 commit 一次,把新增的屬性值也推上 svn repo。

除了上述的步驟可以把目前版本控管下的檔案都加上此屬性,對於未來新增的檔案,我們也必須上這個屬性才行。但是手動加上去不僅麻煩,我們還可能會忘記加上去,此時我們可以用 svn 的 autoprop 功能,讓我們新增檔案後,執行 svn add 的時候,自動加上 svn:eol-style 屬性。

設定 autoprop 的詳細作法,可以參考 Subversion/auto-props

update: 設定 autoprop 的時候不要偷懶,用 * = svn:eol-style=native,不然 6到時候 svn add 一些圖片或 mime type 的檔案的時候,會出警告。還是把一般的文字程式副檔名列清楚吧!

Notes

  1. egistli posted this