让git不关心我的工作树中文件的行结束



让我澄清一下:我希望git在签入/提交时不关心行尾是CRLF还是LF。我知道目前没有办法让git不在乎文件是否有混合行结尾,尽管我很想找到一个解决方法,以防万一;我只是希望它不在乎文件中的所有行结尾是CRLF还是LF。

我最近在我的系统.gitattributes文件/etc/gitattributes(使用MSysGit)中设置了许多文件扩展名,以告诉git哪些扩展名通常是文本或二进制的。对于我希望git认为是文本的大多数文件,我设置了扩展名

*.extension text=auto

因为这将告诉CCD_ 8具有这些扩展名的文件应该具有通用的系统行结尾。现在我对这个决定感到遗憾,因为我看到有多少文件由于这样或那样的原因,自动以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,但我相信还有很多其他原因。

老实说,我个人不在乎一个特定文件有哪种类型的行尾,只要我能在我选择的编辑工具中阅读和编辑这些文件,因为绝大多数时候,行尾除了是行尾之外,没有任何特殊的功能。如果真的很重要,我总是可以用unix2dosdos2unix进行快速转换。然而,众所周知,git对行尾非常挑剔,我不希望它意外地将文本文件标记为二进制文件,反之亦然,因此我一直在更改所有这些默认值。

如何使git将所有文本文件作为LF行结束文件签入,并将其作为CRLF签出,但不关心它们在我的实际工作树中是否有CRLF或LF结尾或者,有没有办法让git将我的工作树中所有以LF结尾的文本文件也转换为CRLF,而不是发出警告并放弃?

EDIT我的问题似乎不是gitattributes文件,而是gitconfig中的core.safecrlf设置。

我的问题似乎是在gitcore.safecrlf中设置了另一个配置设置。根据这个问题的公认答案,它在几篇关于这个主题的博客文章中澄清了一些事情,这个设置会检查git正在签入或签出的文件的行结尾是否会更改。如果它确定它们将被更改,它将中止操作。我以前不理解这个设置,但现在我已经玩了一段时间,我想我确实理解了

据我所知,这个设置似乎只适用于gitattributes中未指定扩展名的二进制文件,以及行结尾在编辑它们时使用的语言中确实有意义的文件。举个例子,让我们假设该语言中的所有文件都具有扩展名.ext。如果这种语言使用计算机用来表示LF的符号和/或他们用来表示CRLF的符号,git不应该转换这些.ext文件。我不知道有什么类似的语言,但如果它们存在,并且程序员仍然希望git将用这些语言编写的文件解释为文本,那么程序员应该在他/她的gitattributes中设置一个特殊的属性,而不是*.ext text

除了这两种类型的文件,我想不出还有其他情况可以使用core.safecrlf=true。因此,在遇到这样的情况之前,我将取消设置此设置,或者可能将其设置为warn

在.gitattributes中,只需添加此行。结账时,无论以前是什么,它都会将所有行尾转换为CRLF。

* text eol=crlf

看看这个http://git-scm.com/docs/gitattributes

设置为字符串值"crlf"

此设置强制Git在签入时规范化此文件的行尾,并在文件签出时将其转换为CRLF。

git config autocrlf <option>

It can have options:
1) true:             x -> LF -> CRLF
2) input:            x -> LF -> LF
3) false:            x -> x -> x

相关内容

  • 没有找到相关文章

最新更新