我希望git能够在内部存储CLRF行结束样式的文本文件,我不仅希望在工作目录中看到这样的行结尾(但WD也应该包含CRLF文件)。什么是实现此目的的.gitattributes配置?
我需要这个,所以存储库可以与Mercurial无缝同步,也可以在内部使用CRLF(由于原始文件就是这样)。
在浏览了我在网上找到的所有可能的配置后,包括这里,我找不到可以产生CRLF的解决方案。最后,文件最终存储为LF。我尝试了以下.gitattributes文件:
* text=
* text eol=crlf
还尝试了text = auto,text = crlf甚至没有第一行,没有运气。我还重新克隆了改变之间的回购。
谢谢。
修改:在发布此消息后5秒,我发现了另一个似乎正在运行的代码段:
*.* -crlf
但是我不确定这到底是做什么的。有人可以确认这是我想要的,以后不会咬我吗?
答案 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
是默认设置)。