使用.gitattributes创建带有CRLF行结尾的git store文本文件

时间:2015-11-22 03:39:09

标签: git mercurial line-endings gitattributes

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

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

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

* text=
* text eol=crlf

还尝试了text = auto,text = crlf甚至没有第一行,没有运气。我还重新克隆了改变之间的回购。

谢谢。

修改:在发布此消息后5秒,我发现了另一个似乎正在运行的代码段:

*.* -crlf

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

1 个答案:

答案 0 :(得分:5)

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

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翻译成crlf内部,所以如果你有编辑器存储lf,但需要内部的数据,它就不会有帮助。如果您只是想避免进行任何类型的翻译,那么只需* -crlf即可,以避免应用任何自动翻译。但是,如果您未设置autocrlf之类的任何设置,则默认情况下不进行任何翻译(Windows除外,我认为autocrlf是默认设置)。