有没有办法设置默认行结束模式不同于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,因为它是'自动'转换默认设置? - 或 - 针对这种情况的任何解决方案?
答案 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环境变量。为我工作。