【问题标题】:Fix already commited CRLF in git修复 git 中已经提交的 CRLF
【发布时间】:2017-03-31 16:12:44
【问题描述】:

我已将 git 设置为 core.autocrlf = true。但是,似乎已经在存储库中提交了具有 CRLF 的文件。当我修改这样的文件时,git 似乎认为不需要隐式转换,因此git diff 在每一行的末尾显示那些烦人的^M。对于以 CRLF 检出但以 LF 形式提交的其他文件,我在更改的行末尾看不到任何 ^M。如何修复存储库中的问题文件?

我不想使用使用git filter-branch 的解决方案,因为我不想重写历史记录。我想创建一个新的提交来修复有问题的文件。最好我想修复单个文件,而不是一次修复所有文件。

【问题讨论】:

  • 我会跳过使用 core.autocrlf。它可能非常棘手......而且它是解决 EOL 错误的旧实现。尝试使用 gitattributes git-scm.com/docs/gitattributes(阅读有关文本)

标签: git newline


【解决方案1】:

使用您喜欢的文本编辑器将所有 CRLF 更改为 LF。任何好的编程编辑器或 IDE 都可以选择使用哪个 EOL 序列。将其更改为 Unix 样式并重新格式化项目中的所有文件。然后提交。

【讨论】:

  • 这基本上可以,但是有两个小问题。如果您可以更新您的答案,我会将其标记为正确。 1. 我想把 CRLF 改成 LF 而不是 CR。 2.在我提交之后,我仍然需要在工作目录中重置更改的文件,因此签出的版本再次具有CRLF。我通过运行以下两个命令来做到这一点:git rm --cached -- <filename> 后跟 git reset --hard
  • @lanoxx 工作副本中有 CRLF 的原因是什么?
  • 在 Windows 下,git 的推荐模式是设置core.autocrlf=true,它将 LF 提交到存储库并检查平台依赖行结尾。因此,它可以很好地在 Linux 和 Mac 上检查 LF,但在 Windows 上检查 CRLF。
猜你喜欢
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
相关资源
最近更新 更多