简短问题:
我可以通过使用.gitattributes并将有问题的文件设置为二进制来解决我的各种Git行结束跨平台转换问题吗?我无法控制回购或用户设置。
另外:对于面向Web的Windows开发,CRLF仍然需要吗?大多数工具都有自动检测或切换模式的选项,并且似乎只适用于LF。
(删除咆哮)
注意:我已经在SO上阅读了很多(全部?)答案,请阅读help,阅读book并在此处花费太多时间。
更新:
我不是在看this help file而是在.gitattributes中提到取消设置text
:
取消设置
取消设置路径上的text属性会告诉git在签入或结帐时不要尝试任何行尾转换。
为什么“help.github.com”和“git-scm.com”都没有提到这个可能的解决方案超出了我的范围,但描述看起来不错。
但github的帮助确实提到它粗略,这就是为什么我认为这就是我想要的。
二进制设置是-text -diff
的别名
我打算尝试一下,如果有问题就更新。
更新2:
有效!在.gitattributes中使用*.txt -text
可以解决问题:没有转换但仍然是diffable和line / char摘要等)
答案 0 :(得分:1)
您可以配置git以在添加内容时将CRLF转换为LF,而不是相反:
git config --global core.autocrlf input
的相关文档
<强> core.autocrlf 强>
将此变量设置为“true”几乎与在所有文件上将text属性设置为“auto”几乎相同,只是不保证文本文件的规范化:不会触及存储库中包含CRLF的文件。如果要在工作目录中具有CRLF行结尾,请使用此设置,即使存储库没有标准化的行结尾。 此变量可以设置为输入,在这种情况下不执行输出转换。
或者在这个SO答案中进行更深入的解释:git replacing LF with CRLF
答案 1 :(得分:1)
我认为,如果你把所有内容都变为二进制,那么你提交的内容将不再是行差异,这会阻止git diff
,git log --stat
或者像工作那样。您最好的选择是确保所有文件都保存为LF,使用core.autocrlf输入强制所有文件转换为LF,或者只是尝试使用不同的VCS,如果它给您带来了很多麻烦。
答案 2 :(得分:0)
你可以尝试一下,看看它是如何起作用的:
git config core.autocrlf false # no automatic eol munging
git config core.whitespace cr-at-eof # diff ignores trailing CR
git config branch.<name>.mergeoptions -Xignore-space-at-eol
并且最好避免text
中的显式.gitattributes
属性(这会在结帐时强制执行eol转换,但转换后的版本不会无偿地重新检入)。
See the merge doc for the effects of that branch config,(加the config docs),它对我来说似乎很有效。或者只在遇到麻烦时手动指定它。
如果你有其他工具无法处理混合或外来的eols,你仍然需要解决它们的限制,可能是在他们需要的文件上加上明确的eol
属性。我自己将其作为一个每回购的东西,这是一个本地问题,如果工具得到修复就会消失。
答案 3 :(得分:0)
我在我的问题中更新了:在-text
中使用.gitattributes
来使git将文件作为文本进行操作,但不进行任何行转换。它仍将显示差异(以及相关的更改摘要):
*.txt -text