4

我希望 git 在内部存储具有 CLRF 行结尾样式的文本文件,我不只是想在工作目录中看到这样的行结尾(但 WD 还应该包含 CRLF 文件)。可以实现此目的的 .gitattributes 配置是什么?

我需要这个,以便存储库可以与内部也使用 CRLF 的 Mercurial 无缝同步(由于原始文件是这样的)。

在检查了我在网上找到的所有可能配置之后,包括这里,我找不到会产生 CRLF 的解决方案。最后,这些文件最终被存储为 LF。我尝试了以下 .gitattributes 文件:

* text=
* text eol=crlf

还尝试了 text=auto, text=crlf ,即使没有第一行,也没有运气。我还在更改此设置之间重新克隆了存储库。

谢谢你。

编辑:在我发布这篇文章 5 秒后,我发现另一个似乎正在工作的片段:

*.* -crlf

但是我不确定这到底是做什么的。有人可以确认这是我想要的,以后不会咬我吗?

4

1 回答 1

6

你想要与 Git 原生支持的相反。Git 将换行视为本机内部行尾,并且要么支持不进行过滤,因此根据文件系统中的文件的内容存储 lf 或 crlf,或者过滤以将文件系统上的文件中的 crlf 转换为内部的 lf 和内部的 lf到文件系统上的crlf。所以没有一个 eol 设置对你有用,因为听起来你想要相反的;crlf 在内部, lf 在文件系统上。

Git 还支持任意“涂抹”和“清洁”过滤器。“涂抹”做了一些“弄脏”文件的转换,而“清洁”应该做相反的转换来清理它以提交。

为此,请将以下内容添加到您的.git/config:

[filter "dosify"]
        clean = unix2dos
        smudge = dos2unix

然后在你的.gitattributes

* filter=dosify

如果您没有dos2unix/unix2dos安装,您可以改用:

[filter "dosify"]
        clean = tr '\\n' '\\r\\n'
        smudge = tr '\\r\\n' '\\n'

编辑:响应您的编辑,-crlf仅意味着不会在任何方向上进行 crlf <-> lf 翻译。它不会在内部将工作目录中的 lf 转换为 crlf,因此,如果您有存储 lf 的编辑器,但需要在内部将数据设为 crlf,则无济于事。如果您只是想避免进行任何类型的翻译,那么* -crlf应该工作,以避免应用任何自动翻译。但是,如果您从未设置过任何类似的设置autocrlf(Windows 除外,我认为这autocrlf是默认设置),则默认情况下不进行任何翻译。

于 2015-11-22T04:07:01.370 回答