Android Studio - 基于Git的多平台项目的CRLF vs LF

SVM*_*SVM 7 git android core.autocrlf android-studio

我正在开发一个涉及多个开发人员的Android项目,其中一些开发人员在Windows上,另一些开发人员在Linux/MacOS上.由于我在Windows上,我已被指示配置Git如下以避免问题:

autocrlf = true
safecrlf = true
Run Code Online (Sandbox Code Playgroud)

这很好用.我在Android Studio中创建的任何.java/XML/etc文件都是CRLF,当我将它们推入repo时转换为LF,然后当我将更改提取到本地副本时返回CRLF.问题是,由于某种原因,某些类型的文件(如矢量可绘制资源)会在LF中生成.因此,当我尝试将它们添加到Git时,我得到了"不可逆转换"错误:

在此输入图像描述 我知道我可以设置safecrlf = warn,但据我所知,如果Git错误地将它们用于文本文件,则存在破坏二进制文件的风险,因此我正在寻找更安全的解决方案.现在我在将它们添加到Git之前手动将矢量资源编辑到CRLF中,这避免了上述错误消息,但是为每个文件重复该过程变得乏味.有什么方法可以强制Android Studio在CRLF中生成所有本地文件?

小智 11

在 Android Studio 中,转到设置,菜单 - 文件/设置/编辑器/代码样式。在这里您可以选择默认的行分隔符。


Coo*_*ind 8

对于像我一样搜索如何为 Android Studio 文件设置 LF 或 CRLF 的人,您可以在 IDE 的右下角更改此设置。单击“CRLF”并选择另一个选项。但我不知道如何为整个项目做到这一点,而不是每个文件。

在此处输入图片说明

  • 对于 *all* 文件,`git add --renormalize .` 可以提供帮助:请参阅上面我编辑过的答案。 (2认同)

Von*_*onC 6

我将设置core.autocrlftrue(我建议反对它自2010年以来):它留给假.

您希望在.gitattributes文件中管理的任何文件,尤其是从Git 2.10开始.请参阅发行说明

echo "*.java text=auto eol=crlf" >.gitattributes
Run Code Online (Sandbox Code Playgroud)

该组合已被修复为等同于做

$ git config core.autocrlf true
Run Code Online (Sandbox Code Playgroud)

使用.gitattributes,您可以将eol转换限制为所需的精确文件集,而不是盲目地将其应用于所有 repo文件.
有关详细信息,请参阅" 结帐和登记 ".

使用Git 2.16+,git add --renormalize .允许将所有相关文件EOL.