2017-03-31 35 views
1

我已將git設置爲core.autocrlf = true。但是,似乎已經存在在庫中具有CRLF的已提交文件。當我修改這樣的文件時,git似乎認爲不需要隱式轉換,結果git diff在每行的末尾顯示那些令人討厭的^M。對於被檢出爲CRLF但以LF提交的其他文件,在更改的行末尾沒有看到任何^M。我如何解決存儲庫中有問題的文件?修復已在git中提交CRLF

我不想使用使用git filter-branch的解決方案,因爲我不想重寫歷史記錄。我想創建添加一個新的提交來修復有問題的文件。最好我想解決個別文件,而不是一次一個。

+0

我會跳過使用core.autocrlf。它可能是棘手的...加上它是解決EOL錯誤的舊實現。嘗試使用gitattributes https://git-scm.com/docs/gitattributes(閱讀關於文本) – eftshift0

回答

1

使用您最喜愛的文本編輯器將所有CRLF更改爲LF。任何優秀的編程編輯器或IDE都有一個可供選擇的EOL序列。將其更改爲Unix樣式並重新格式化項目中的所有文件。然後進行提交。

+0

這基本上可行,但有兩個小問題。如果您可以更新您的答案,我會將其標記爲正確。 1.我想將CRLF更改爲LF而不是CR。 2.我做了提交後,仍然需要重置工作目錄中已更改的文件,因此簽出的版本再次具有CRLF。我通過運行以下兩個命令來完成此操作: 'git rm --cached - ''後面跟'git reset --hard'。 – lanoxx

+0

@lanoxx在工作副本中使用CRLF的原因是什麼? –

+0

在Windows下,推薦使用git來設置'core.autocrlf = true',它將LF提交到存儲庫並檢出平臺依賴和行結束符。因此,在Linux和Mac上檢查LF,而在Windows上檢查LF。 – lanoxx