Pie*_*one 3 git mercurial line-endings gitattributes
我想git在内部存储CLRF行结束样式的文本文件,我不只是想在工作目录中看到这样的行结尾(但WD也应该包含CRLF文件).什么是.gitattributes配置才能实现这一目标?
我需要这个,所以存储库可以与一个也在内部使用CRLF的Mercurial无缝同步(由于原始文件是这样的).
在浏览了我在网上找到的所有可能的配置后,包括这里,我找不到可以产生CRLF的解决方案.最后,文件最终存储为LF.我尝试了以下.gitattributes文件:
* text=
* text eol=crlf
Run Code Online (Sandbox Code Playgroud)
还试过text = auto,text = crlf甚至没有第一行,没有运气.我还重新克隆了改变之间的回购.
谢谢.
编辑:在我发布此文章后的5秒内,我发现了另一个似乎正在运行的代码段:
*.* -crlf
Run Code Online (Sandbox Code Playgroud)
但是我不确定这到底是做什么的.有人可以确认这是我想要的,以后不会咬我吗?
你想要与Git原生支持的相反.Git认为换行是本机内部行结束,并且要么支持不进行过滤,要么根据文件系统中的文件存储lf或crlf,或过滤将文件系统中的文件中的crlf转换为lf内部,以及lf内部在文件系统上crlf.所以没有一个eol设置对你有用,因为听起来你想要相反; crlf内部,以及文件系统.
Git还支持任意"涂抹"和"清洁"过滤器."污迹"做了一些"弄脏"文件的转换,"干净"应该进行相反的转换以清理它以进行提交.
为此,请将以下内容添加到您的.git/config:
[filter "dosify"]
clean = unix2dos
smudge = dos2unix
Run Code Online (Sandbox Code Playgroud)
然后在你的.gitattributes:
* filter=dosify
Run Code Online (Sandbox Code Playgroud)
如果您没有dos2unix/ unix2dos安装,您可以使用:
[filter "dosify"]
clean = tr '\\n' '\\r\\n'
smudge = tr '\\r\\n' '\\n'
Run Code Online (Sandbox Code Playgroud)
编辑:要响应您的编辑,-crlf只意味着不会在任何一个方向上完成任何crlf < - > lf翻译.它不会在你的工作目录中将lf转换为crlf内部,所以如果你有编辑器存储lf,但需要内部的数据是crlf,它将无济于事.如果您只是想避免进行任何类型的翻译,那么就* -crlf应该工作,以避免应用任何自动翻译.但是,如果您没有设置任何设置,则不进行任何转换autocrlf(除非在Windows上,我认为这autocrlf是默认设置).