如何让Git在索引中存储CRLF

9

我在工作中使用 git-svn,经常有人抱怨我提交的是 LF 而不是 CRLF。(我们主要用 Windows 系统)。

据我所知,当 core.autocrlftrue 时,工作副本使用的是 CRLF,当为 false 时,则使用 LF,当为 input 时,则保持不变。我喜欢 autocrlf = true 的概念,但希望它默认在索引中使用 CRLF,因为这是提交到 SVN 中的方式。

有没有一种方法可以设置索引使用哪种行结尾符?

我已经看到了 core.eol,但这似乎只能设置工作副本使用的行结尾符,而无法设置索引使用的行结尾符。

3个回答

2

您需要将名为.gitattributes的文件添加到项目的根目录中。这将强制每个人提交相同的行结束符。在您的情况下,由于您想要强制使用crlf,因此您将在.gitattributes中添加此行:

* text eol=crlf

然后,您也可以一次规范仓库中的所有文件,以后就不必再费心了:尝试使用Git filter-branch解决行结尾问题,但没有成功 您还可以参考GitHub关于行结尾的指南:https://help.github.com/articles/dealing-with-line-endings

1
我认为这甚至没有回答问题 - 文档说这就像设置 core.autocrlf = true 但仅适用于某些文件(在这种情况下仅适用于文本文件,因此没有任何区别)。 - kelloti
通过指定*,您可以处理每个文件。而文本文件是指不包含二进制文件的文件,并且不仅限于*.txt文件。此外,将autocrlf设置为true将始终把文件提交为以lf结尾的文件,这就是为什么我们手动将它们设置为crlf的原因。 - Simon Boudrias
4
对于 eol=crlf,它表示“此设置强制Git在提交时规范化该文件的行尾,并在检出文件时将其转换为CRLF。” 对我来说,这意味着它仍然会在索引中规范化为 LF(阅读不明确),并在工作副本中转换为 CRLF。 但我想要它在索引中规范化为 CRLF。 这是否可能? - kelloti
你可以进行测试。git diff会指出是否有行尾的更改。如果不起作用,只需将core.autocrlf设置为false,Git就不会自动更改任何行尾;只要每个开发人员都在Windows上,这将起作用。 - Simon Boudrias
2
似乎提问者想要在索引中存储CRLF。但这并不能实现。 - Daniel Leach
显示剩余4条评论

1
原来,git-svn使用SVN中的svn:eol-style属性来决定如何存储行尾。如果您进入一个纯SVN checkout并添加svn:eol-style设置为native,则Git将在Windows上使用CRLF,在Linux/OSX上使用LF。
我还有这些设置:
$ git config core.autocrlf false
$ git config core.safecrlf true

我在我的 .gitattributes 文件中没有任何内容。


1
我知道这个问题很旧了,但以防万一还有人在寻找答案...
首先,你必须确保你的全局和本地配置中的core.autocrlffalse。 然后,要强制git转换为CRLF,你可以使用一个像这样定义的filter
在你的本地config文件(.git\config)中:
[filter "crlf"]
        clean = unix2dos

你可以通过在属性文件(.git\info\attributes)中添加特定文件的过滤器来使用它:

*.txt filter=crlf

此过滤器使用了 Git for Windows 中附带的命令 unix2dos,如果您使用 Linux,则可能已经可用。否则,您可以安装它或使用类似的替代命令sed -i -e 's/\r//g'(假设您的文件中没有任何 Mac 换行符,此命令适用)。


像这样在所有文件上运行过滤器怎么样?

* filter=crlf

这个可能行得通,但是我在一个大型仓库中没有使用过它,所以无法保证它不会影响性能,也不能保证没有损坏二进制文件的风险。
幸运的是,unix2dos 已经设置了一些检查来检测二进制文件,并且如果检测到是二进制文件,它不会对其进行任何更改。我尝试在一个PNG文件上运行它,得到的结果是:
unix2dos: Binary symbol 0x1A found at line 2
unix2dos: Skipping binary file fff.png

你可能需要留意一下,如果有些文件没有被正确检测到的话。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接