1. 程式人生 > >談談git中的CRLF和LF

談談git中的CRLF和LF

在使用git時,常常會遇到這樣的情況:程式碼一個沒動,但是version control中對比中總能看到兩個大大的不同:左邊LF、右邊CRLF。

1.LF、CRLF是什麼

CRLF的全拼是Carriage-Return Line-Feed,直譯是回車換行;

LF是Line-Feed,直譯是換行。

2、為何會產生LF、CRLF差異

由於歷史的原因,各作業系統對行尾結束符的處理不盡相同。Window中使用CRLF,而UNIX系(包括UNIX、Linux、Mac OS等)中使用LF。

3.git對CRLF、LF的處理

在學習git軟體,安裝git到configuring the lien ending conversion時,有三個選項。

a. Checkout Windows-style,commit Unix-style line endings.

b.Checkout as-is,commit Unix-style line endings.

c.Checkout as-is,commit as-is line endings.

這裡面講到了做兩個操作(Checkout,Commit)的三種處理line endings的操作(Windows-style,Unix-style,As-is)。

Git提供了一個“換行符自動轉換”功能。這個功能預設處於“自動模式”,當你在簽出檔案時,它試圖將 UNIX 換行符(LF)替換為 Windows 的換行符(CRLF);當你在提交檔案時,它又試圖將 CRLF 替換為 LF。Git 的“換行符自動轉換”功能聽起來似乎很智慧、很貼心,因為它試圖一方面保持倉庫內檔案的一致性(UNIX 風格),一方面又保證本地檔案的相容性(Windows 風格)。但遺憾的是,這個功能是有 bug 的,而且在短期內都不太可能會修正。

使用者可以使用命令進行設定:

git config --global core.autocrlf false
git config --global core.safecrlf true

含義:
AutoCRLF
#提交時轉換為LF,檢出時轉換為CRLF
git config --global core.autocrlf true

#提交時轉換為LF,檢出時不轉換
git config --global core.autocrlf input

#提交檢出均不轉換
git config --global core.autocrlf false
SafeCRLF
#拒絕提交包含混合換行符的檔案
git config --global core.safecrlf true

#允許提交包含混合換行符的檔案
git config --global core.safecrlf false

#提交包含混合換行符的檔案時給出警告
git config --global core.safecrlf warn

如果是在Window上,使用git的預設配置就行了(線上庫是LF,工作區是CRLF)。如果是UNIX系統,統一使用LF就行了。

4.IDE設定使用UNIX換行符
IDEA的設定File -> Settings
Editor -> Code Style
Line separator (for new lines) ,選擇:Unix and OS X (\n)

對已使用Windows換行符的檔案,可以使用Sublime Text開啟,
View->Line Endings,選Unix,儲存;