6

我有一个同时用于WindowsLinux的源存储库。

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

这不是源文件的问题。

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

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

*.csv    -text

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

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

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

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

感谢您的任何意见。

4

1 回答 1

8

请注意,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 将它们添加回来,这次没有任何转换
于 2014-01-27T10:15:05.637 回答