每次我们从不同的分支机构更改.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
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
没有一种解决方案对我有用,因此我进行了更多研究,并在此链接中发现了这一点:
在您的项目主目录中,创建或编辑.gitattributes文件,并添加以下内容:
*.strings diff=localizablestrings
Run Code Online (Sandbox Code Playgroud)在主目录的.gitconfig文件中,添加以下行:
[diff "localizablestrings"]
textconv = "iconv -f utf-16 -t utf-8"
Run Code Online (Sandbox Code Playgroud)这成功了。