2012-07-17 62 views
1

我正在與一些其他人合作編輯一些CSV文件,這些文件存儲在Github上的存儲庫中。我們使用的是Windows,OS X和Linux的合作者,所以要應對行結尾和本地的Git設置的差異,我加了一個.gitattributes具有下列文件:奇怪的Git行結束問題

* text=auto 

人們使用Excel編輯這些CSV文件,然後保存並提交。有時在提交時,文件似乎根本沒有行結尾;行通過回車符(\ r)終止。然後,Github將這些文件視爲一大特色,並認爲整個文件已被刪除,並由一條長行代替。下面是一個例子這樣的承諾:

https://github.com/weecology/neonetods/commit/7e10cb2913ca2e214c49944b4856519cab9bad96

如果你要簽出文件,你會看到每個行以\ r結束。在Mac和Windows上簡單地在Excel中編輯和保存文件後,現在已經發生了兩個人。

這是造成衝突的地方,不應該有衝突,並且很難追蹤每個文件的出處。有沒有人有任何想法如何發生這種情況或我們如何解決它?

回答

1

這個人:

git and CR vs LF (but NOT CRLF)

也有類似的問題。解決方案是使用過濾器,這很不方便,因爲每個人都必須將過濾器定義添加到.git/config,但它應該可以解決問題。

花了很長的時間來找出適當的過濾器來使用,但這:

clean = LC_CTYPE=C awk '{printf(\"%s\\n\", $0)}' | LC_CTYPE=C tr '\\r' '\\n' 

...就是結束了大家的工作。它用\ n替換\ r \ n(這樣\ r \ n不會變成\ n \ n),然後用\ n替換\ r,並處理在Mac上使用tr時產生的一些奇怪的字符編碼問題。