【发布时间】:2014-09-23 22:59:08
【问题描述】:
让我澄清一下:我希望git 在签入/提交时不关心行尾是 CRLF 还是 LF。我知道目前没有办法让git 不在乎文件是否有 mixed 行结尾,尽管我希望有一个解决方法,以防万一;我只是希望它不关心文件中的所有行尾都是 CRLF 还是 LF。
我最近在我的系统.gitattributes 文件中设置了许多文件扩展名/etc/gitattributes(使用MSysGit),以告诉git 哪些扩展名通常是文本或二进制。对于我希望git 认为是文本的大多数文件,我设置了扩展名
*.extension text=auto
因为这会告诉git 具有这些扩展名的文件应该具有通用系统行结尾。现在我对这个决定感到遗憾,因为我看到有多少文件出于某种原因自动给出了 LF 行结尾而不是 CRLF。现在,在修改了这个设置和其他设置之后,我遇到了类似于
$ git add -A && git commit -m "signup/in/out now possible through passport"
fatal: LF would be replaced by CRLF in node_modules/mongoose/node_modules/ms/package.json
在我尝试签入的很多文件上。在这种情况下,似乎是 npm 导致这些文件被创建为 LF 而不是 CRLF,但我确信还有许多其他原因。
说实话,我个人并不关心特定文件的行尾类型,只要我可以在我选择的编辑工具中读取和编辑这些文件,因为绝大多数时候除了行尾之外,行尾没有任何特殊功能。如果真的很重要,我可以随时使用unix2dos 或dos2unix 进行快速转换。但是,git 对行尾的挑剔是出了名的,我不希望它意外地将文本文件标记为二进制文件,反之亦然,因此我一直在更改所有这些默认值。
我如何使git 将所有文本文件签入为 LF 行结尾的文件,并将它们签出为 CRLF,但不在乎它们在我的实际工作树中是否有 CRLF 或 LF 结尾? 或者,有没有办法让git 在我的工作树中也将所有以 LF 结尾的文本文件转换为 CRLF,而不是发出警告并放弃?
编辑看来我的问题不在于我的gitattributes 文件,而在于我的gitconfig 中的core.safecrlf 设置。
【问题讨论】:
标签: windows git line-endings