2017-03-31 73 views
1

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

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

+0

我会跳过使用core.autocrlf。它可能是棘手的...加上它是解决EOL错误的旧实现。尝试使用gitattributes https://git-scm.com/docs/gitattributes(阅读关于文本) – eftshift0

回答

1

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

+0

这基本上可行,但有两个小问题。如果您可以更新您的答案,我会将其标记为正确。 1.我想将CRLF更改为LF而不是CR。 2.我做了提交后,仍然需要重置工作目录中已更改的文件,因此签出的版本再次具有CRLF。我通过运行以下两个命令来完成此操作: 'git rm --cached - ''后面跟'git reset --hard'。 – lanoxx

+0

@lanoxx在工作副本中使用CRLF的原因是什么? –

+0

在Windows下,推荐使用git来设置'core.autocrlf = true',它将LF提交到存储库并检出平台依赖和行结束符。因此,在Linux和Mac上检查LF,而在Windows上检查LF。 – lanoxx