阻止CSV文件的EOL规范化

Pra*_*eek 4 git github eol end-of-line

我有一个源代码存储库,可以在WindowsLinux上使用.

我知道Git会自动将EOL转换为本地标准:Windows上的\ r \n和Linux 上的\n.

这不是源文件的问题.

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

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

*.csv    -text
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

感谢您的任何意见.

小智 6

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

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

所以解决方案大致如下:

  1. 删除所有*.csv文件,提交更改
  2. 编辑.gitattributes,commit
  3. 添加所有*.csv文件,再次提交

实际上,它可以在一次提交中完成,使用以下命令:

### ... update .gitattributes
git rm --cached '*.csv'
### ... find -name '*.csv' -print0| xargs -0 unix2dos
git add '*.csv'
git add .gitattributes
git commit
Run Code Online (Sandbox Code Playgroud)

说明:

  • git rm --cached 从索引中删除所有csv文件,将它们留在磁盘上;
  • 确保文件具有CRLF行结尾(我unix2dos以其为例)
  • git add '*.csv' 根据.gitattributes的新版本,将它们添加回来,这次没有任何转换