1. 程式人生 > >跨平臺開發下換行符CRLF和LF的問題

跨平臺開發下換行符CRLF和LF的問題

在跨平臺下開發應用,首先應該考慮的是各種相容性的問題,這裡討論在windows和linux下聯合開發而導致換行符不相容的問題:

linux作業系統下的換行符為/n,而windows作業系統下的換行符則為/r/n,這導致在程式執行的時候會出現一些問題,下面舉個我遇到的問題和解決方法:

問題描述:

在windows下編寫的shell指令碼,通過FileZilla上傳到linux伺服器上執行時,會出現/r的命令不存在的錯誤,這是因為linux下的shell指令碼只識別/n為換行符,而把/r當做程式的指令,這樣就會出現指令碼執行不成功的現象。

解決辦法:

1Git可以在你提交時自動地把行結束符CRLF轉換成

LF,而在簽出程式碼時把LF轉換成CRLF,從而實現兩作業系統的相容性。可以用core.autocrlf來開啟此項功能, 如果是在Windows系統上,把它設定成 true,這樣當簽出程式碼時,LF會被轉換成CRLF:執行命令:git config --global core.autocrlf true

(2)把core.autocrlf設定成input來告訴Git在提交時把CRLF轉換成LF,簽出時不轉換:執行命令:git config --global core.autocrlf input

3如果你是Windows程式設計師,且正在開發僅執行在Windows上的專案,可以設定false

取消此功能,不進行變換,也就是一直是CRLF。把回車符記錄在庫中:執行命令:git config --global core.autocrlf input

下面我以shami專案中的generate_api_doc.sh檔案為例做這三個實現

windows本地檔案大小為347B(CRLF),而在github上的程式碼大小為320B(LF)

實驗(1):

  在git上使用指令git config --global core.autocrlf true 可以開啟該功能,

  然後使用指令git checkout generate_api_doc.sh 可以重新檢出這個檔案(檔案動過才能重新整理成功)

  檔案大小就變成347B

實驗表明(2):

  在git上使用指令git config --global core.autocrlf input 可以開啟該功能,

  然後使用指令git checkout generate_api_doc.sh 可以重新檢出這個檔案(檔案動過才能重新整理成功)

  檔案大小就變成320B

實驗表明(3):

git上使用指令git config --global core.autocrlf false 可以開啟該功能,

  然後使用指令git checkout generate_api_doc.sh 可以重新檢出這個檔案(檔案動過才能重新整理成功)

  檔案大小就變成347B

注:

(1)git config core.autocrlf 可以檢視狀態

(2)檔案動過才能重新整理成功的意思就是檔案檢出一次後,需要有修改才能再次檢出成功,為了實驗成功,可以用linux下的檔案  覆蓋windows的檔案,再進行checkout操作