2012-07-18 39 views
3

我知道有大量關於此問題的文章。但是我幾周沒有成功掙扎。用於Windows用戶的Git CRLF

我正在嘗試使用在github上描述的最佳做法。所以我加了一個.gitattributes文件,例如,它看起來是這樣的:

*.cs text 

而且我已經爲所有的文件歸行尾。現在我有乾淨的工作副本,沒有任何提交。但現在,如果我在任何Windows文本編輯器中打開罰款,並進行一些隨機更改,保存文件,撤消更改,我看到這個文件已更改。我明白這是因爲文件現在具有窗口樣式行結束符。但這是可怕的工作方式,文件沒有變化,我想git知道它沒有git reset --hard。在這種情況下你會推薦什麼?

+0

你究竟如何「正常化」呢?對於Windows,我在我的'.cs'文件中使用'\ r \ n'並使用'as-is'行結束符git設置 – zerkms 2012-07-18 03:57:15

+0

什麼是告訴你文件已經改變。你有沒有嘗試過運行'git status'刷新緩存? – 2012-07-18 05:29:08

+0

是git狀態告訴文件已經改變。 – Sly 2012-07-18 06:06:59

回答

4

如果你不想讓你的文件的eol風格改回windows,不要讓git執行任何「automagic」轉換。
因此,違背了「best practices from GitHub」:

git config --global core.autocrlf true 

如果你真的(我的意思是真的)需要在一個特定的目錄中一個特殊的文件集合來獲得一個特定的EOL風格,在你的.gitattributes file添加它在所述目錄,而不是使用text=auto意思,只有「text eol=lf or crlf

+0

修改一些更多的參考:http://git-scm.com/book/en/Customizing-Git-Git-Configuration#Formatting-and-Whitespace – 2012-07-18 06:21:29

+0

所以你的意思是設置* .cs -text = auto int gitattributes以覆蓋core.autocrlf設置? – Sly 2012-07-18 06:45:53

+0

@Sly如果'core.autocrlf'設置爲false,則不需要使用'auto'。只有'lf'或'crlf'如果你想強制執行一個特定的風格。或者什麼都不是,如果你的文本編輯器在保存文件時不改變eol。 – VonC 2012-07-18 07:09:36

2

真正這裏的問題是:什麼是你工作和誰在一起?

除非您正在開展OSS工作,否則所有這些屬性混淆都是不值得的。對於擁有團隊成員的組織,請通過以下設置關閉自動行結束轉化:

core.autocrlf false 

這涵蓋了大多數情況。

如果您有一個位於GitHub上的子模塊,您可以在每個回購基礎上設置它們。