如何在Cygwin中为git设置系统默认行为CRLF模式?

时间:2016-06-14 07:07:34

标签: git cygwin

有没有办法设置默认行结束模式不同于git的系统(Cygwin)默认值?

我在Cygwin上使用Windos-Git(即GitBash)和本机git。我的问题的根本原因是CYGWIN认为自己是un * x,因此默认行结尾设置为LF。但是,CYGWIN在Windows上运行,大多数其他合作软件,包括GitBash,都希望行结束模式为CRLF。

我使用这两个因为我管理git数据库,并且需要确保不同工程师/客户端可用于不同的工程师。

在Cygwin中,当我将core.crlf设置为true时,它不会将文本文件转换为CR / LF,因为Cygwin认为自己是un * x。

GIT中是否有设置告诉git强制git使用CR / LF,因为它是'自动'转换默认设置? - 或 - 针对这种情况的任何解决方案?

3 个答案:

答案 0 :(得分:4)

经过长时间的实验,其他原因混淆(包括文件执行位问题,我错误地认为是行结束问题),最后我得到了与VonC的答案相同的结论。但是,在这里,我将发布更完整的设置和解释:

首先,我会要求工程师在~/gitconfig的[核心]部分添加以下行:

[core]
    filemode = false
    autocrlf = false

这修复了文件执行模式问题(filemode选项),并强制git不自动执行crlf转换(autocrlf选项)。

其次,对于Windows,我们可以选择使用此选项。

[core]
    eol = crlf

这告诉git将.gitattributes中标记为'text'的文件转换为CR / LF行结尾,如果.gitattributes中未指定行结束模式。 请注意,仅当autocrlf = false文件中的.gitconfig时,git才会使用此选项。

我们让工程师决定使用eol = crlf甚至是eol = lf,因为他们知道他们喜欢什么行结束模式。

最后,对于项目.gitattributes,我们首先将文本文件分为三组:(A)需要CR / LF行结尾的文本文件,(B)工具生成的文本文件/工具链(例如.xml文件),我们不会通过文本编辑器编辑它们,(C)可以使用行结束模式的文本文件(例如.cpp,.c,.h文件)。然后我们将.gitattributes设置如下:

*.<extension-for-groupA>    text    eol=crlf
*.<extension-for-groupB>    binary
*.<extension-for-groupC>    text

第三行至关重要。如果文件未标记为“文本”,则git会将不同的行结尾视为git status中文件的某些差异。

如果用户.gitconfig拥有autocrlf = false,则第二行无效。然而为了安全起见,我们添加了这一行。

一个有趣的设置是:

*.sh                 binary

对于许多常规shell脚本,使用*.sh text eol=lf应该没问题。但是,那些带有内联CR / LF特殊字符的shell脚本可能已损坏。

== UPDATE ==

忘了说,我们仍然需要在fileMode = false部分为远程存储库和/或本地存储库添加/更改[core]。这很重要。本地存储库设置会覆盖用户.gitconfig设置。

答案 1 :(得分:0)

为了清楚起见,gitattributes doc和“Dealing with line endings”推荐:

*.<yourExtension> text eol=crlf

没有“core.crlf

text eol=crlf
  

Git会在结账时始终将行结尾转换为CRLF。您应该将此文件用于必须保留CRLF结尾的文件,即使在OSX或Linux上也是如此。

答案 2 :(得分:0)

将SHELLOPTS igncr添加到Windows环境变量。为我工作。