gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 14:31:54 25 4
gpt4 key购买 nike

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

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

我同时使用两者,因为我管理 git 数据库,并且需要确保不同工程师对不同 git 工具/客户端的可用性。

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

GIT 中是否有设置告诉 git 强制 git 使用 CR/LF 因为它是“自动”转换默认设置? -或- 这种情况有什么解决办法吗?

最佳答案

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

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

[core]
filemode = false
autocrlf = false

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

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

[core]
eol = crlf

这告诉 git 将在 .gitattributes 中标记为“文本”的文件转换为 CR/LF 行结尾,如果它们的行结束模式未在 .gitattributes 中指定。请注意,只有当 .gitconfig 文件中的 autocrlf = false 时,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 中文件的一些差异。

第二行无效,如果用户的.gitconfigautocrlf = false。但是为了安全起见,我们添加了这一行。

一个有趣的设置是:

*.sh                 binary

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


== 更新 ==

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

关于git - 如何在 Cygwin 中为 git 设置系统默认行以 CRLF 模式结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37805181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com