2013-06-01 66 views
52

我是新來的git,我已經讀了很多關於行尾和 Git是如何對待他們。順便說一句,我在Windows上。我製作了 a .gitattributes文件,並將例如* .txt設置爲文本。 當我提交一個txt文件,我得到警告:git:如何在不禁用safecrlf的情況下襬脫「警告:CRLF將被LF取代」?

警告:CRLF將LF在whatever.txt

被替換,但我知道這一點。我不需要這個警告。替換行 文本文件中的結尾是我想要的。

現在,設置safecrlf爲false使警告 消失,但safecrlf手冊上寫着:

如果爲真,使得git的檢查,如果轉換CRLF是可逆 時結束線轉換爲主動。 Git將驗證命令 是否直接在工作樹上修改文件 或間接修改文件。例如,提交一個文件後跟 檢出相同的文件應該在工作樹中產生原始文件 。如果core.autocrlf的當前設置爲 ,git將拒絕該文件。

從此,safecrlf似乎是一個好主意。 但是,我不明白爲什麼設置safecrlf爲真 給我警告我的文本文件;在我看來, 這些是不同的問題 - 文本文件的警告和 檢查是否可逆。事實上,git不會拒絕我的 文件。

我可以擺脫文本文件的警告,並仍然有 safecrlf集?或者我誤解了一些東西?

+1

爲什麼文件不是已經轉換成Window的樣式文件?我覺得這個警告很好,git告訴你它以某種方式修改了這個文件。真正的解決方案是沒有文件處於git必須修改它的狀態。如果您從中央存儲庫克隆,您可能會對其他人造成危險。 – cforbish

+0

cforbish我認爲這是一個Windows風格的文件。它有CRLF,它會用LF結尾來承擔。但我知道這一點。 – oskarkv

+0

oskarkv抱歉的誤解。你碰巧使用vim/gvim嗎?如果是這樣,您可以使用':set ff = unix'將該文件製作爲Linux樣式文件,以避免警告。這實際上修改了文件,所以你必須':w'。 – cforbish

回答

9

在你.gitattributes,您可以:

# normalize text files to use lf 
text eol=lf 

# except these which we want crlf 
*.txt eol=crlf 
+0

你也可以用差異如何完成有趣的事情,例如'* .cs eol = crlf diff = csharp' –

+0

或合併:'* .csproj merge = union' –

+2

這不能回答我的問題。 – oskarkv

13

據我所知,設置core.safecrlffalse是關閉該警告唯一方式。

safecrlf通常是沒有必要的,如果你的屬性設置正確。的safecrlf的一點是要防止正常化在被應該已經混合的文件(或非LF)行結尾在存儲庫中。它只能與core.autocrlf結合使用(以確保其自動猜測不會破壞任何東西),並且如果您通過.gitattributes設置了自己的屬性,則可以將其全部關閉。

4

簡短的回答你的問題是NO。

因爲,基本上,核心。safecrlf設置控制 「警戒線」:

  • 假 - 進行無預警
  • 警告 - 有警告
  • 真正進入 - 不要繼續

所以,你必須選擇選項最適合你。