阻止CSV文件的EOL规范化

时间:2014-01-27 00:37:16

标签: git github eol end-of-line

我有一个源存储库,可以从 Windows Linux 中使用。

我知道 Git 会自动将 EOL 转换为Windows上的本地标准: \ r \ n \ n < / strong>在Linux上。

这不是源文件的问题。

但是我有一些 CSV文件使用具有给定EOL字符( \ r \ n )的固定格式,不应该更改,但Git也会转换它们,破坏了一些代码。

我尝试通过在 .gitignore 文件旁边的根目录创建 .gitattributes 文件来阻止CSV文件的EOL转换,其中包含以下内容:

*.csv    -text

我已经应用了我所理解的内容:http://git-scm.com/docs/gitattributes

但是Git仍在Linux上将 \ r \ n 转换为 \ n

我应该使用auto.crlf等其他设置吗?

请注意,我对Linux本地存储库的控制有限,因为它由持续集成服务器Jenkins 管理。

感谢您的任何意见。

1 个答案:

答案 0 :(得分:6)

请注意,git使用LF作为EOL的内部表示。

这意味着在您的情况下,* .csv文件在添加/提交时已经更改。

所以解决方案大致如下:

  1. 删除所有* .csv文件,提交更改
  2. 编辑.gitattributes,commit
  3. 添加所有* .csv文件,再次提交
  4. 实际上,它可以在一次提交中完成,并使用以下命令:

    ### ... 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为例)
    • 根据新版本的.gitattributes ,
    • git add '*.csv'将它们添加回来,这次没有任何转换。