如何在更改行分隔符的情况下将文件提交到 git(获取 'nothing to commit')

How to commit files to git with line separator changed (getting 'nothing to commit')

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

无论我如何尝试提交和推送更改 - 我都得到 'nothing to commit'。 Intellij 起初似乎注意到了一个差异,因为当我右键单击并提交回购时,它选择了那些文件进行提交——然后提交失败并出现相同的错误。

在这种情况下,您似乎开启了 core.autocrlf。这是处理 Windows 的预期且正确的方法,因为它将 LF 结尾存储在您的存储库中,并在您使用 Windows 时将它们转换为 CRLF。但是,这确实意味着 Git 不会将行尾的更改视为可以提交的更改,因为无论哪种方式,存储库中的行尾都是 LF。

如果您完全、绝对确定您的代码库绝不会用于非Windows系统并且绝不会[=27] =] 被任何使用 Linux 的 Windows 子系统的人使用,然后你可以关闭那个标志,并且 Git 不会改变你的行尾,所以你将存储 CRLF (或者更准确地说,无论你使用什么行结尾)在存储库中。但是,如果您有使用 macOS、Linux 或 WSL 的用户,那么如果您这样做,您会让他们非常生气,然后您的存储库中很可能会有决斗线结束战争。

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

*.bat eol=crlf

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

*.sh eol=lf

这些不是为首选项或跨平台兼容性而设计的,而是文件实际上已损坏并且如果行尾错误则永远无法工作的地方。如果问题只是编辑器(即使是每个人都使用的编辑器)或编译器,让人们使用 core.autocrlf 来解决他们系统上的问题。