如何让git将.strings文件视为文本文件而不是二进制文件

Yuc*_*ong 10 git

每次我们从不同的分支机构更改.strings文件(用于iOS本地化)时,我们都会遇到冲突.

原因似乎是git将.strings视为二进制文件而不是文本文件.有时它有点烦人,因为git无法自动合并更改,因为它们被认为是二进制格式.

是否有任何git设置会强制它将文件视为文本文件.

我注意到SourceTree和GitLab都无法判断它是文本文件.但XCode本身将能够向我们展示差异.不确定这是否相关.

在此输入图像描述

Jon*_*ink 15

.gitattributes使用以下内容在repo的根目录下创建一个文件:

*.strings diff
Run Code Online (Sandbox Code Playgroud)

更多信息:https://git-scm.com/docs/gitattributes

  • @ slawomir-jaranowski建议`text`,而你建议`diff`; 有什么不同? (2认同)

Yuc*_*ong 12

在尝试了Jonathan或Slawomir的解决方案之后,我仍然无法正确看到差异.它们仍被视为二进制文件.

我终于弄清楚我们的localizable.strings文件不是UTF-8编码,而是UTF-16编码.将编码更改回UTF-8后,它可以正常工作.

可以改变编码吗?是的.Apple实际上建议使用UTF-8.

注意:建议您使用UTF-8编码保存字符串文件,这是标准字符串文件的默认编码.当它们被复制到产品中时,Xcode会自动将字符串文件从UTF-8转码为UTF-16.

[参考]

你怎么知道那个文件的编码是什么?见这个命令行和对Xcode的:

file -I vol34.tex 
Run Code Online (Sandbox Code Playgroud)

请参阅下面的注释,您可能需要手动更改文件的编码:

iconv -f UTF-16 -t UTF8 file.strings
Run Code Online (Sandbox Code Playgroud)


小智 7

没有一种解决方案对我有用,因此我进行了更多研究,并在此链接中发现了这一点:

这成功了。