一般,咱們使用git作源碼版本控制,在windows平臺開發源碼並進行單元測試,而後打包部署到linux平臺進行集成測試或系統測試。linux
除源碼以外,咱們會爲部署寫一些自動化的腳本,方便服務的啓動和關閉。因爲腳本文件是直接打包並上傳到linux平臺的,而windows平臺和linux平臺的換行符不一樣,這就致使了腳本在linux平臺上執行錯誤。git
如上圖所示,在默認的狀況下,git遠程倉庫(Linux)的代碼換行符是LF(linux平臺換行符),經過git clone或git pull將代碼拉到本地(windows平臺),git會自動將換行符替換成CRLF。本地代碼經過git push推送到遠程倉庫,git又會自動替換成linux換行符。
另外,IDEA新建文件,默認也是使用平臺的換行符,即windows平臺使用CRLF。shell
在測試階段,須要頻繁的更新文件,腳本也不便單獨部署,手動解決換行符的問題(IDEA上能夠作)比較低效。windows
本文就這個問題給出解決方案。bash
問題出現的緣由,是由於git和IDEA考慮了平臺換行符的兼容性,其實以LF換行的文件,在windows也能夠良好的識別。因此咱們能夠修改git和idea的行爲,不讓它更改換行符。ide
git有兩個配置項,與換行符相關:工具
core.autocrlf - true 提交時轉換爲LF,檢出時轉換爲CRLF(默認行爲)。 - false 提交檢出均不轉換。 - input 提交時轉換爲LF,檢出時不轉換 core.safecrlf - true 拒絕提交包含混合換行符的文件 - false 容許提交包含混合換行符的文件 - warn 提交包含混合換行符的文件時,給出警告
由於咱們只是想確保本地的代碼也使用LF換行符,並不打算改變遠程倉庫的換行符,因此建議設置以下:單元測試
core.autocrlf=input core.safecrlf=true
IDEA上也能夠設置,新建的文件使用的換行符:測試
這些設置並不能改變已有文件的換行符,最直接的方式是把本地倉庫刪除掉,從新從遠程倉庫拉代碼。idea
可是這個方案存在着必定的難度和隱患。說難,是由於須要在團隊內部進行宣貫,確保每一個人都按照這樣作了;說隱患,是新員工未必能及時遵照這個規定,或者在從新安裝軟件的時候,又恢復到了默認的設置。
不過,這並不算什麼大事情,只是有點麻煩。
之因此要修改換行符,是由於咱們要部署到linux平臺上去用,那麼可讓打包腳本統一修改文件的換行符。
藉助於dos2unix工具,腳本能夠直接調用命令,將要修改的文件路徑做爲參數。要遞歸修改某個目錄,也能夠經過shell腳原本實現。
首先,從連接下載工具,放置到合適的目錄。
經過相似於下面的命令,實現遞歸修改文件:
find D:/projects/release_dir -type f ! -name "*.jar" | xargs dos2unix.exe # find:搜索文件系統 # -type f:限定文件 # !:邏輯非 # -name:匹配文件名
這個方案直接面對問題進行處理,不和平臺之間換行符轉換的問題進行糾纏,也沒必要要求同事進行各類設置。只一條:經過打包腳原本打包。
而通常狀況下,咱們都樂於使用打包腳原本自動打包,因此這一條也沒有給開發人員添加任何負擔。
總結
我更推薦使用第二種方案,它顯得輕量小巧,不和其餘問題糾纏夾雜,乾淨利索。