让我澄清一下:我希望git
不关心在结账/提交时行结尾是CRLF还是LF。我知道目前没有办法让git
不关心文件是否有混合行结尾,尽管我希望能解决这个问题,以防万一;我只是想要不关心文件中的所有行结尾是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-line-ended文件,并将其作为CRLF检查,但不关心它们在我的实际工作树中是否有CRLF或LF结尾?或者,有没有办法让git
将所有带有LF结尾的文本文件转换为我工作树中的CRLF,而不是发出警告并放弃?
编辑我的问题似乎与我的gitattributes
文件无关,但在我的core.safecrlf
中设置了gitconfig
。
答案 0 :(得分:0)
我的问题似乎与我在git
,core.safecrlf
中设置的其他配置设置有关。根据{{3}}的已接受答案,该答案澄清了有关该主题的若干博客文章中的内容,此设置会检查文件git
是否正在签入或签出其行结尾是否已更改。如果确定它们将被更改,则会中止操作。我之前没有理解这个设置,但是现在我已经玩了一下,我想我明白了。
从我可以看出来的情况来看,似乎此设置仅对于gitattributes
中未指定扩展名的二进制文件以及行结尾实际上具有该语言含义的文件有用你将用它来编辑它们。例如,我们假设此语言中的所有文件都具有扩展名.ext
。如果此语言使用计算机用来表示LF和/或用于表示CRLF的符号,则git
不应转换这些.ext
文件。我不知道这样的任何语言,但如果它们存在,并且如果程序员仍然希望git
将这些语言编写的文件解释为文本,程序员应该在他/中设置一个特殊属性她的gitattributes
,而不是*.ext text
。
除了这两种类型的文件之外,我无法想到使用core.safecrlf=true
的任何其他情况。因此,在我遇到这样的情况之前,我将设置此设置,或者设置为warn
。
答案 1 :(得分:-1)
在.gitattributes中,只需添加此行即可。无论以前是什么,它都会在结账时将所有行结尾转换为CRLF。
* text eol=crlf
请参阅此http://git-scm.com/docs/gitattributes
设置为字符串值" crlf"
此设置强制Git在签入时规范化此文件的行结尾,并在签出文件时将其转换为CRLF。
答案 2 :(得分:-2)
git config autocrlf <option>
It can have options:
1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x