2014-01-27 74 views
3

我有一個源存儲庫,它既用於從WindowsLinux防止CSV文件的EOL標準化

我知道的Git將自動轉換EOL的地方標準:\ r \ n在Windows和\在Linuxñ

這不是源文件的問題。

但我有使用固定的格式與不應該改變一個給定的EOL字符(\ r \ n),但Git的轉換他們也打破了一些代碼的一些CSV文件

我試圖以防止CSV文件,EOL轉換通過在根目錄創建一個.gitattributes文件,旁邊的.gitignore文件,包含以下內容:

*.csv -text 

我VE應用了哪些我從理解:http://git-scm.com/docs/gitattributes

但仍的Git在Linux轉換\ r \ n\ n

我應該玩像auto.crlf另一個設置?

請注意,由於它由持續集成服務器Jenkins管理,因此我對Linux本地存儲庫的控制有限。

感謝您的任何意見。

+0

文件擴展名的新版本Linux區分大小寫。你的CSV文件是否真的是* .CSV?嘗試向.gitattributes文件添加一些案例變體。 –

+0

您試過 '* .csv eol = crlf'? –

+0

@PaulHicks:謝謝,但所有的擴展名都是小寫的「csv」。 – Pragmateek

回答

5

請注意,git使用LF作爲EOL的內部表示。

這意味着在你的情況下,* .csv文件在添加/提交時發生了變化。

因此解決的辦法去大致是這樣的:

  1. 刪除所有*的.csv文件,提交這一變化
  2. 編輯.gitattributes,提交
  3. 加回所有*。CSV文件,再次提交

事實上,它可以在一個全部由提交,用下面的命令:

### ... update .gitattributes 
git rm --cached '*.csv' 
### ... find -name '*.csv' -print0| xargs -0 unix2dos 
git add '*.csv' 
git add .gitattributes 
git commit 

說明:

  • git rm --cached從指數中刪除所有CSV文件,留在磁盤上;
  • 確保文件具有CRLF行結束(我使用unix2dos爲例)
  • git add '*.csv'增加他們回來了,這次沒有任何轉變,根據.gitattributes
+0

太棒了!它完美的作品。太糟糕了,我們需要依靠這種解決方法。謝謝! :) – Pragmateek