使用 tortoisegit 提交專案時,出現LF will be replaced by CRLF in...
迷茫2017-05-02 09:49:01
0
2
938
在提交專案時,出現一堆warning:LF will be replaced by CRLF in...,一直卡在更新索引,準備提交那兒,在網上查了,說是換行符的問題,解決辦法git config - -global core.autocrlf false即可解決,然而我這裡沒有效果,不知是哪裡的問題,哪位大神幫忙看下。下面是config的內容
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text
# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
如果你熟悉.gitignore的话,你会觉得上面这个文件的左边一列很熟悉,这里我们就不再赘述了,不熟悉的话,请自行查阅相关资料。唯一的不同就是.gitattributes文件多了右边一列,如text, text eol=crlf, binary,剛剛我們也說過這一列是用來設定左邊對應檔案使用的換行符格式的,左右兩列用空格隔開。下面我們來詳細介紹下右邊一列的語法:
text=auto 讓git自行處理左邊匹配的檔案使用何種換行符號格式,這是預設選項。
text eol=crlf 對左邊符合的檔案統一使用CRLF換行符號格式,如果有檔案中出現LF將會轉換成CRLF。
text eol=lf 對左邊符合的檔案統一使用LF換行符號格式,如果有檔案中出現CRLF將會轉換成LF。
在解決你的問題之前,我需要多囉嗦幾句。在你透過github或其他遠端託管伺服器來和其他人進行協同開發程式碼的時候,確保換行符號被正確處理是一項很重要的事。首先,你要知道不同的作業系統對換行符的定義會有所不同,Unix或類Unix作業系統的換行符號叫做LF,而windows系統的叫做CRLF,二者有很大的差別:
Note:引自回車(CR)與換行(LF), 'r'和'n'的區別.
這就是造成問題的根源--也就是如果你使用的是windows系統,而你的小夥伴用的是Mac的話,當你們使用git協同開發軟體時,就會出現換行符不統一的問題。
git其實可以自己處理換行不統一的問題,但可能會產生意想不到的結果。因此,有必要進行相關的設置,一般如果你不想麻煩的話,可以採用常用的方法,如下所示:
其實,在你安裝windows版本的git或torgoiseGit時,你可能已經進行過這樣的配置,也許你當時並未知道,比如樓主之所以產生這樣的警告:
就是因為你進行了上面的配置。至於為什麼會一直卡在那兒,可能是因為需要替換的地方太多,也許你耐心等一會兒就好了。對了,你將
true
改为false
的話,是讓git自行處理,所以並沒有報警告,這並沒有從根本上解決問題,這樣做可能會造成你與你的小伙伴的換行符不統一。當然,有更好的方法解決換行符不統一的問題——使用
.gitattributes
文件统一换行符。这个文件有点儿类似于.gitignore
,不僅名字很類似,使用方式,編寫語法也很像。這個檔案必須位於倉庫的根目錄,可以像其他檔案一樣進行修改、提交。以下介紹如何寫這個文件:
檔案內容看起來像一張表格,總共分成兩列:左邊一列是git要符合的檔案名稱;右邊是git需要採用的換行符號格式。下面我們來看一個栗子:
如果你熟悉
.gitignore
的话,你会觉得上面这个文件的左边一列很熟悉,这里我们就不再赘述了,不熟悉的话,请自行查阅相关资料。唯一的不同就是.gitattributes
文件多了右边一列,如text
,text eol=crlf
,binary
,剛剛我們也說過這一列是用來設定左邊對應檔案使用的換行符格式的,左右兩列用空格隔開。下面我們來詳細介紹下右邊一列的語法:text=auto
讓git自行處理左邊匹配的檔案使用何種換行符號格式,這是預設選項。
text eol=crlf
對左邊符合的檔案統一使用CRLF換行符號格式,如果有檔案中出現LF將會轉換成CRLF。
text eol=lf
對左邊符合的檔案統一使用LF換行符號格式,如果有檔案中出現CRLF將會轉換成LF。
binary
binary
告诉git这不是文本文件,不应该对其中的换行符进行改变。另外,
binary
和符号-text -diff
告訴git這不是文字文件,不應該對其中的換行符進行改變。另外,binary
和符號-text -diff
是等價的。上面這些文法應該已經夠了,如果有興趣的,可以自行查閱相關資料,例如官方的資料:https://git-scm.com/book/en/v...。
一般來說,第二種方法是最好的方案,雖然比起第一種要麻煩一些。
P.S:已整理為部落格:Git處理換行符問題
你搞反了吧,應該要設定成true才對。