跨平台代码换行符的问题处理
背景概述
通常,我們使用git做源碼版本控制,在windows平臺開發源碼并進行單元測試,然后打包部署到linux平臺進行集成測試或系統測試。
除源碼之外,我們會為部署寫一些自動化的腳本,方便服務的啟動和關閉。由于腳本文件是直接打包并上傳到linux平臺的,而windows平臺和linux平臺的換行符不同,這就導致了腳本在linux平臺上執行錯誤。
如上圖所示,在默認的情況下,git遠程倉庫(Linux)的代碼換行符是LF(linux平臺換行符),通過git clone或git pull將代碼拉到本地(windows平臺),git會自動將換行符替換成CRLF。本地代碼通過git push推送到遠程倉庫,git又會自動替換成linux換行符。
另外,IDEA新建文件,默認也是使用平臺的換行符,即windows平臺使用CRLF。
在測試階段,需要頻繁的更新文件,腳本也不便單獨部署,手動解決換行符的問題(IDEA上可以做)比較低效。
本文就這個問題給出解決方案。
方案一:別給我改
問題出現的原因,是因為git和IDEA考慮了平臺換行符的兼容性,其實以LF換行的文件,在windows也可以良好的識別。所以我們可以修改git和idea的行為,不讓它更改換行符。
git有兩個配置項,與換行符相關:
core.autocrlf- true 提交時轉換為LF,檢出時轉換為CRLF(默認行為)。- false 提交檢出均不轉換。- input 提交時轉換為LF,檢出時不轉換core.safecrlf- true 拒絕提交包含混合換行符的文件- false 允許提交包含混合換行符的文件- warn 提交包含混合換行符的文件時,給出警告 因為我們只是想確保本地的代碼也使用LF換行符,并不打算改變遠程倉庫的換行符,所以建議設置如下:
core.autocrlf=input
core.safecrlf=true IDEA上也可以設置,新建的文件使用的換行符:
這些設置并不能改變已有文件的換行符,最直接的方式是把本地倉庫刪除掉,重新從遠程倉庫拉代碼。
但是這個方案存在著一定的難度和隱患。說難,是因為需要在團隊內部進行宣貫,確保每個人都按照這樣做了;說隱患,是新員工未必能及時遵守這個規定,或者在重新安裝軟件的時候,又恢復到了默認的設置。
不過,這并不算什么大事情,只是有點麻煩。
方案二:讓腳本改
之所以要修改換行符,是因為我們要部署到linux平臺上去用,那么可以讓打包腳本統一修改文件的換行符。
借助于dos2unix工具,腳本可以直接調用命令,將要修改的文件路徑作為參數。要遞歸修改某個目錄,也可以通過shell腳本來實現。
首先,從鏈接下載工具,放置到合適的目錄。
通過類似于下面的命令,實現遞歸修改文件:
find D:/projects/release_dir -type f ! -name "*.jar" | xargs dos2unix.exe# find:搜索文件系統
# -type f:限定文件
# !:邏輯非
# -name:匹配文件名 這個方案直接面對問題進行處理,不和平臺之間換行符轉換的問題進行糾纏,也不必要求同事進行各種設置。只一條:通過打包腳本來打包。
而一般情況下,我們都樂于使用打包腳本來自動打包,所以這一條也沒有給開發人員添加任何負擔。
總結
我更推薦使用第二種方案,它顯得輕量小巧,不和其他問題糾纏夾雜,干凈利索。
轉載于:https://www.cnblogs.com/ywjy/p/10638669.html
總結
以上是生活随笔為你收集整理的跨平台代码换行符的问题处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 福特蒙迪欧致胜这车怎么样?耗油吗??
- 下一篇: 逆风是谁画的啊?