使 git 以 .git 属性存储带有 CRLF 行结尾的文本文件
Make git store text files with CRLF line endings with .gitattributes
我希望git在内部存储具有 CLRF 行尾样式的文本文件,我不只是想在工作目录中看到这样的行尾(但 WD 也应该包含 CRLF文件)。实现此目的的 .gitattributes 配置是什么?
我需要这个,这样存储库就可以与也在内部使用 CRLF 的 Mercurial 存储库无缝同步(由于原始文件就是这样)。
在检查了我在网上找到的所有可能的配置(包括此处)后,我找不到可以产生 CRLF 的解决方案。这些文件最终以 LF 格式存储。我尝试了以下 .git 属性文件:
* text=
* text eol=crlf
还尝试了 text=auto、text=crlf,甚至没有第一行,也不走运。我也在改变这个之间重新克隆了 repo。
谢谢。
编辑: 在我发布这篇文章 5 秒后,我发现了另一个似乎有效的片段:
*.* -crlf
但是我不确定这到底是做什么的。有人可以确认这就是我想要的它以后不会咬我吗?
你想要的是 Git 原生支持的对立面。 Git 认为换行符是本机内部行结束符,支持不进行过滤,根据文件系统中的文件存储 lf 或 crlf,或者过滤以将文件系统中文件中的 crlf 转换为内部 lf , 和 lf 内部到文件系统上的 crlf。所以 none 的 eol 设置对你有用,因为听起来你想要相反的东西;在内部 crlf,在文件系统上 lf。
Git 也支持任意 "smudge" 和 "clean" 过滤器。 "smudge" 对 "dirties" 文件做一些转换,"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 的编辑器,但需要在内部将数据转换为 crlf,则它无济于事。如果您只是想避免进行任何类型的翻译,那么 * -crlf
应该可以工作,以避免应用任何自动翻译。但是,如果您从未设置过 autocrlf
之类的任何设置(Windows 除外,我认为 autocrlf
是默认设置,则默认情况下不进行任何翻译。
我希望git在内部存储具有 CLRF 行尾样式的文本文件,我不只是想在工作目录中看到这样的行尾(但 WD 也应该包含 CRLF文件)。实现此目的的 .gitattributes 配置是什么?
我需要这个,这样存储库就可以与也在内部使用 CRLF 的 Mercurial 存储库无缝同步(由于原始文件就是这样)。
在检查了我在网上找到的所有可能的配置(包括此处)后,我找不到可以产生 CRLF 的解决方案。这些文件最终以 LF 格式存储。我尝试了以下 .git 属性文件:
* text=
* text eol=crlf
还尝试了 text=auto、text=crlf,甚至没有第一行,也不走运。我也在改变这个之间重新克隆了 repo。
谢谢。
编辑: 在我发布这篇文章 5 秒后,我发现了另一个似乎有效的片段:
*.* -crlf
但是我不确定这到底是做什么的。有人可以确认这就是我想要的它以后不会咬我吗?
你想要的是 Git 原生支持的对立面。 Git 认为换行符是本机内部行结束符,支持不进行过滤,根据文件系统中的文件存储 lf 或 crlf,或者过滤以将文件系统中文件中的 crlf 转换为内部 lf , 和 lf 内部到文件系统上的 crlf。所以 none 的 eol 设置对你有用,因为听起来你想要相反的东西;在内部 crlf,在文件系统上 lf。
Git 也支持任意 "smudge" 和 "clean" 过滤器。 "smudge" 对 "dirties" 文件做一些转换,"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 的编辑器,但需要在内部将数据转换为 crlf,则它无济于事。如果您只是想避免进行任何类型的翻译,那么 * -crlf
应该可以工作,以避免应用任何自动翻译。但是,如果您从未设置过 autocrlf
之类的任何设置(Windows 除外,我认为 autocrlf
是默认设置,则默认情况下不进行任何翻译。