我希望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
是默认设置)。