0

我需要为拉取请求更新一些文件,以便它们具有与项目其余部分匹配的行分隔符。我已经在 notepad++ 中将这些文件从 LF 更改为 CRLF(无法弄清楚如何在 intellij 中进行操作),现在我正在尝试提交此更改 - 仅此而已。

无论我如何尝试提交和推送更改 - 我都“没有什么可提交的”。Intellij 一开始似乎注意到了差异,因为当我右键单击并提交 repo 时,它选择了这些文件进行提交 - 然后提交失败并出现相同的错误。

4

1 回答 1

1

听起来在这种情况下您已经打开了core.autocrlf. 这是在 Windows 上工作的预期和正确方法,因为它将 LF 结尾存储在您的存储库中,如果您在 Windows 上,它将它们转换为 CRLF。但是,这确实意味着 Git 不会将行尾的更改视为可以提交的更改,因为存储库中的行尾都是 LF。

如果您完全、绝对确定您的代码库永远不会在非 Windows 系统上使用,并且永远不会被任何使用 Linux 的 Windows 子系统的人使用,那么您可以关闭该标志,Git 不会改变您的路线结尾,因此您将在存储库中存储 CRLF(或更准确地说,您使用的任何行结尾)。但是,如果您有使用 macOS、Linux 或 WSL 的用户,如果您这样做,您会让他们非常反感,然后您的存储库中可能会出现决斗线结束战争。

相反,如果您需要始终使用特定序列签出特定文件集的行结尾(例如,您有一个批处理文件,而 CMD 无法处理仅 LF 结尾),那么您将添加一个条目到您的.gitattributes文件中,适当地标记它们:

*.bat eol=crlf

同样,如果你的 shell 脚本总是必须使用 LF 结尾,你可以这样写:

*.sh eol=lf

这些不是为偏好或跨平台兼容性而设计的,而是文件在字面上被破坏并且如果它有错误的行结尾就无法工作。如果问题只是一个编辑器(甚至是每个人都使用的编辑器)或编译器,让人们使用它core.autocrlf来解决他们系统上的问题。

于 2020-04-27T23:17:45.623 回答