带有 CRLF 和 LF 文件的 Git 存储库?

Posted

技术标签:

【中文标题】带有 CRLF 和 LF 文件的 Git 存储库?【英文标题】:Git repository with both CRLF and LF files? 【发布时间】:2016-05-12 15:08:41 【问题描述】:

我有一个 git 存储库,其文件的行尾在签出时应该是 CRLF 或 LR,具体取决于特定文件。例如,我希望所有 *.sh 文件都以 LR 行结尾签出,而所有 *.bat 文件都以 CRLF 签出。

我一直在尝试解决这个问题,但没有结果,接下来是我的 .gitattributes 文件:

* text=auto
#
# Declare files that will always have CRLF line endings on checkout.
#

*.sh text eol=LF

#
# Declare files that will always have LF line endings on checkout.
#

*.bat text eol=CRLF

#
# Denote all files that are truly binary and should not be modified.
#

*.zip binary
*.tar binary
*.exe binary
*.dll binary
*/dropbear binary
*update-binary binary

当我打开 .sh 文件或 .bat 文件时,两个行尾都是 CRLF。我做错了什么?

注意:我在 Windows 计算机上开发。

编辑:系统、全局和本地配置

系统:

core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true

全球:

merge.tool=kdiff3
diff.guitool=kdiff3
core.editor="C:/Program Files (x86)/GitExtensions/GitExtensions.exe" fileeditor
core.autocrlf=true
credential.helper=!'C:\Users\XXXX\AppData\Roaming\GitCredStore\git-credential-winstore.exe'
user.name=xxxxx.xxxx
user.email=xxxx.xxxx@xxxxx.com
filter.lfs.clean=git-lfs clean %f
filter.lfs.smudge=git-lfs smudge %f
filter.lfs.required=true
push.default=matching

本地:

core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
remote.origin.url=https://github.com/XXXXXX/xxxxxx.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.v2.10.0.remote=origin
branch.v2.10.0.merge=refs/heads/v2.10.0
branch.v2.10.1.remote=origin
branch.v2.10.1.merge=refs/heads/v2.10.1

另外,GitHub's documentation 声明如下:

(可选)您可以通过配置一个特殊的 .gitattributes 文件来配置 Git 在每个存储库的基础上管理行尾的方式。该文件被提交到存储库并覆盖个人的 core.autocrlf 设置,确保所有用户的行为一致,无论他们的 Git 设置如何。

编辑 2:

如果我将core.autocrlf 设置为false 并注释.gitattributes 的所有行,那么.sh.bat 文件都以LF 行结尾打开。

【问题讨论】:

【参考方案1】:

eol 属性值与大多数 Git 一样,区分大小写。你想要:

*.sh eol=lf
*.bat eol=crlf

【讨论】:

一个“正确答案”,一个+1,如果可能的话,我会给你一个吻。你解决了一个让我浪费了很多时间的问题! omg.. 我第一次使用 .gitattributes 时遇到了同样的问题,我完全忽略了这一点

以上是关于带有 CRLF 和 LF 文件的 Git 存储库?的主要内容,如果未能解决你的问题,请参考以下文章

Git将图像中的CRLF转换为LF

Git中CRLF与LF的转换

Git在Windows上签出带有LF行尾的特定文件类型

[git] warning: LF will be replaced by CRLF | fatal: CRLF would be replaced by LF[ git 处理和修改行结束符(CRLF

git转换换行符LF与CRLF转换问题-Windows系统和Linux系统差异统一

git LF 和 CRLF换行的问题