跨平臺開發下換行符CRLF和LF的問題
在跨平臺下開發應用,首先應該考慮的是各種相容性的問題,這裡討論在windows和linux下聯合開發而導致換行符不相容的問題:
linux作業系統下的換行符為/n,而windows作業系統下的換行符則為/r/n,這導致在程式執行的時候會出現一些問題,下面舉個我遇到的問題和解決方法:
問題描述:
在windows下編寫的shell指令碼,通過FileZilla上傳到linux伺服器上執行時,會出現/r的命令不存在的錯誤,這是因為linux下的shell指令碼只識別/n為換行符,而把/r當做程式的指令,這樣就會出現指令碼執行不成功的現象。
解決辦法:
(1)Git可以在你提交時自動地把行結束符CRLF轉換成
(2)把core.autocrlf設定成input來告訴Git在提交時把CRLF轉換成LF,簽出時不轉換:執行命令:git config --global core.autocrlf input
(3)如果你是Windows程式設計師,且正在開發僅執行在Windows上的專案,可以設定false
下面我以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操作