2013-03-17 14 views
44

當我嘗試提交一些修改過的文件,我得到TortoiseGit試圖提交的Git文件,但越來越::致命:LF會被CRLF在<在回購一些文件>替換

fatal: LF would be replaced by CRLF in <some file in the repo>

以下錯誤消息

現在,在我得到通常的LF vs CRLF答案之前,我知道並理解辯論的內容。其次,我也把我的全局設置:

core.autocrlf true

三,I've got a .gitattributes file

所以我-want-確保或文件被強制具有CRLF

我不明白的是,它在說FATAL和持續封鎖我。一個警告?當然!我知道我想要做什麼嗎?我做!

我只是希望它默默地STFU轉換。

另外,如果它被迫阻止我,有沒有辦法我可以更新回購中的所有文件爲CRLF,所以這個警告可能會丟失?

這些回購是私人的,所以他們永遠不會在Windows + Visual Studio之外開發。

任何人都可以請求幫助而不貶低這個線程autocrlf TRUE vs autocrlf FALSE宗教戰爭。

回答

56

您可能需要設置core.safecrlf爲「警告」,如果你想只警告,而非致命錯誤。

"git config" mange page

core.safecrlf

如果爲真,使得GIT中檢查,如果轉換CRLF是可逆的,當結束線轉換是有效的。 Git將驗證命令是直接還是間接地修改工作樹中的文件。
例如,提交文件後檢出相同的文件應該在工作樹中產生原始文件。 如果core.autocrlf的當前設置不是這種情況,那麼git會拒絕文件
變量可以設置爲「警告」,在這種情況下,git只會警告不可逆轉換,但會繼續運行。

CRLF轉換帶有輕微數據損壞的機會。
啓用時,git會在提交期間將CRLF轉換爲LF,並在結帳期間將LF轉換爲CRLF。
git無法重新創建提交前包含LF和CRLF的混合文件。
對於文本文件,這是正確的做法:它糾正行結束,使得我們在存儲庫中只有LF行尾。
但是,對於意外分類爲文本的二進制文件,轉換可能會破壞數據

如果您提前認識到這種腐敗,您可以通過在.gitattributes中明確設置轉換類型來輕鬆修復它。
提交後您仍然在工作樹中有原始文件,並且此文件尚未損壞。你可以明確地告訴git這個文件是二進制的,git會適當地處理這個文件。

不幸的是,無法區分清理帶有混合行結尾的文本文件以及破壞二進制文件的不良效果的理想效果。
在這兩種情況下,CRLF都以不可逆的方式被移除。對於文本文件,這是正確的,因爲CRLF是行結束符,而對於二進制文件,轉換CRLF會破壞數據。

我寧願識別確切的文件或文件類型的我想迫使只.gitattributes文件(core.eol設置,您有)的EOL,並留下autocrlf爲false。

在混合EOL文本fiels的情況下,這意味着blog post,例如,到:

如果你有記事本+安裝在您的計算機上,只需按以下步驟操作。

  1. 打開具有致命問題的文件。
  2. 點擊Edit -> EOL Conversion,然後選擇Windows格式或任何你有問題提交。
+0

非常好的答案!問題:1.爲什麼git要在提交中存儲LF(即轉換CRLF - > LF,反之亦然)?我實際上認爲它正在做反向*腮紅* ...將LF的節省作爲CRLF。 (我也很喜歡Windows是CRLF EOL的怪胎,而其他操作系統通常是* LF)。 2.如果我將AutoCrlF設置爲false ..'.gitattributes'中的示例行會是什麼?我究竟得到了什麼?所以我的'.gitattributes'文件會正確轉換? – 2013-03-18 08:01:01

+0

@ Pure.Krome 1.默認情況下,git會將eol轉換爲尊重其開始運行的操作系統:Linux。 2.如果'核心。autocrl'設置爲false,那麼你可以通過'core.eol'來控制eol轉換,所以你的'.gitattributes'文件看起來很好,你只需要測試它/完成它就可以覆蓋你真正想要的文件兌換。 – VonC 2013-03-18 08:04:48

+0

我讓pgAdmin保存到我用記事本++寫的文件時遇到了這個問題。就像一個人站起來一樣。 – 2015-07-17 13:09:41

5

這將禁用crlf致命警告。

git config core.autocrlf false 
git config core.safecrlf false 
14
git config --global core.safecrlf false 
+0

這可以幫助我很多。確實對我有用。我不知道爲什麼其他指南不適合我。 – Tung 2016-01-14 18:04:45

1

git config --global core.autocrlf false將簽入的文件與CRLF,未使用。

我注意到在Windows上,與core.autocrlf true git不喜歡文件與LF和core.autocrlf input不喜歡CRLF。

因此:使用core.autocrlf true提交CRLF文件,使用core.autocrlf input(或將它們轉換爲CRLF)提交LF文件。

一般與LF由代碼發生器(例如https://start.spring.iohttp://yeoman.io/