使git存储文本文件的CRLF行尾为.gitattributes



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

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

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

* text=
* text eol=crlf

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

谢谢。

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

*.* -crlf

然而,我不确定这到底是怎么回事。有人能确认一下,这就是我想要的,以后不会咬我吗?

您想要的与Git本机支持的相反。Git认为换行是原生的内部换行,并且要么不支持过滤,所以lf或crlf是根据文件系统中的文件存储的,要么过滤,将文件系统上文件中的crlf内部转换为lf,将lf内部转换成文件系统上的crlf。因此,没有一个eol设置适合你,因为听起来你想要相反的设置;crlf在内部,lf在文件系统上。

Git还支持任意的"污迹"one_answers"干净"过滤器。"smud"执行一些"脏"文件的转换,而"clean"应该执行相反的转换来清理文件以提交。

为此,请将以下内容添加到.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'

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

相关内容

  • 没有找到相关文章

最新更新