lag*_*lex 22 git unicode gitattributes
免责声明:Git,我的意思是'我'搞砸了.
此前,我想git-gui
给我看diff
的这它认为是二进制文件.
所以我对我做了一些改动 .\.gitattributes
*.ini text
*.inc text
Run Code Online (Sandbox Code Playgroud)
但它没有用. 然后,我做了一些改变,以我的.\.git\info\attributes
*.ini text
*.inc text
*.inc crlf diff
*.ini crlf diff
Run Code Online (Sandbox Code Playgroud)
它起作用了.
但现在当我回到之前的承诺时,它会搞砸......
它应该是这样的:
它不会发生在所有文件中.编辑:它只发生在其中包含任何特殊字符的文件中.
问:这是提交本身的问题还是只是一些设置?
问:我能恢复吗?
bob*_*nce 26
您的ini文件以UTF-16LE保存,Windows编码错误地将其描述为"Unicode".
Git的默认差异工具不适用于UTF-16,因为它不是与ASCII兼容的编码.这就是git最初将文件检测为二进制文件的原因.
LF/CRLF换行转换将每个0x0A字节视为换行符,并将其替换为0x0D-0x0A.但是,在UTF-16LE文件中,换行实际上是由0x0A-0x00发出信号,并用0x0D-0x0A-0x00替换它意味着你有一个奇数个字节,所以每个双字节代码单元的对齐在下一行不同步.因此,每一条线都会受到损坏.
你的选择是:
恢复属性更改并让Git将文件作为二进制文件处理(失去差异的好处).
以ASCII兼容的编码保存文件.看起来你的内容实际上没有任何非ASCII字符,所以希望这不是问题吗?通常,您希望将所有文件保存为UTF-8 - 这与ASCII兼容,但也允许使用所有Unicode字符.但这取决于Rainmeter是否支持读取那样编码的INI文件(可能不是).
配置git以使用不同的diff工具,但这会使其他人使用你的repo变得更加复杂.
我最近遇到了类似的问题.我们.gitattributes
在根级别有一个项目范围的文件,其中包括以下行: -
* text=auto
*.sql text
Run Code Online (Sandbox Code Playgroud)
我们的团队之一是使用SQL Management Studio编写SQL代码,他不知道将文件保存为UTF-16.他能够毫无问题地将代码签入Git,但在签出时,代码被翻译成中文字符,如本文所述.
有问题的文件的hexdump确认问题确实是0x000A到0x000A0D的转换.
对我们来说,解决方案是使用以下方法将文件转换为ASCII: -
.gitattributes
在本地目录中创建一个临时文件,强制git签出文件而不执行行结束转换.例如包括线*.sql binary
从Git中签出文件.您应该看到文件尚未翻译且没有中文字符.
iconv
,它是作为Git For Windows的一部分安装的.我认为如果文件包含非ASCII字符,UTF-8也是一个选项 - 但这对我们的目的来说不是必需的..gitattributes
文件 归档时间: |
|
查看次数: |
7182 次 |
最近记录: |