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

Android Studio - CRLF vs LF for a Git-based multiplatform project

我正在从事一个涉及多个开发人员的 Android 项目,其中一些在 Windows,其他 Linux/MacOS。由于我在 Windows,我被指示按如下方式配置 Git 以避免出现问题:

autocrlf = true
safecrlf = true

这基本上可以正常工作。我在 Android Studio 中创建的任何 .java/XML/etc 文件都在 CRLF 中,当我将它们推送到存储库时会转换为 LF,然后在我将更改拉入本地副本时返回到 CRLF。问题是,出于某种原因,某些类型的文件(例如矢量可绘制资源)会在 LF 中生成。因此,当我尝试将它们添加到 Git 时,我收到 "irreversible conversion" 错误:

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

我会 不会core.autocrlf 设置为 true(我建议 against it since 2010):将其设置为 false。

您希望在 .gitattributes file, especially since Git 2.10. See the release note

中管理的任何文件
echo "*.java text=auto eol=crlf" >.gitattributes

The combination has been fixed to be equivalent to doing

$ git config core.autocrlf true

使用 .gitattributes,您可以将 eol 转换限制为您想要的精确文件集,而不是盲目地将其应用于 所有 回购文件。
在“Checking-out and checking-in”查看更多信息。

with Git 2.16+git add --renormalize .允许转换所有相关文件eol。

对于像我一样搜索如何为 Android Studio 文件设置 LF 或 CRLF 的人,您可以在 IDE 的右下角更改此设置。单击 "CRLF" 和 select 另一个选项。但我不知道如何对整个项目执行此操作,而不是单独对每个文件执行此操作。

在 Android Studio 中转到设置,菜单 - file/settings/editor/Code 样式。 这里可以选择默认行分隔符。

我更喜欢使用 this 解决方案

git config core.filemode false

它解决了类似于 CRLF 与 LF 模式的类似问题