ENV:
Wheng I git commit
,它说:
warning: LF will be replaced by CRLF.
此警告尾部是否向后?
我在Windows中编辑文件,行尾为CRLF
,就像这张照片:
并且git将其更改为LF
以承诺回购
所以我认为正确的警告是:
warning: CRLF will be replaced by LF.
答案 0 :(得分:147)
警告:LF将被CRLF取代。
根据您使用的编辑器,使用LF的文本文件无需与CRLF一起保存:最近的编辑者可以保留 eol样式。但是git配置设置坚持要改变那些......
只需确保(如I recommend here):
git config --global core.autocrlf false
这样,您就可以避免任何自动转换,并且仍然可以通过.gitattributes
file和core.eol
directives指定它们。
windows git“LF将被CRLF取代” 这个警告尾巴落后了吗?
否:你在Windows上,而git config
help page确实提到了
如果您希望工作目录中有
CRLF
行结尾,请使用此设置,即使存储库没有标准化的行结尾。
如“git replacing LF with CRLF”中所述,只应在结帐(不提交)时使用core.autocrlf=true
。
repo
/ \
crlf->lf lf->crlf
/ \
如XiaoPeng answer所述,该警告与以下内容相同:
警告:(如果您使用当前
core.autocrlf
配置检出/或克隆到另一个文件夹,)LF将被CRLF替换为
该文件将在(当前)工作目录中包含其原始行结尾。
如git-for-windows/git
issue 1242中所述:
我仍然认为此消息令人困惑,可以扩展消息以包含对问题的更好解释,例如:“删除文件并再次检出后,LF将被
file.json
中的CRLF替换”
注意:Git 2。19(2018年9月),使用core.autocrlf
时,虚假“LF
将被CRLF取代“警告现在被压制。
正确地quaylar comments,如果提交转换,则仅LF
。
该特定警告“LF will be replaced by CRLF
”来自convert.c#check_safe_crlf():
if (checksafe == SAFE_CRLF_WARN)
warning("LF will be replaced by CRLF in %s.
The file will have its original line endings
in your working directory.", path);
else /* i.e. SAFE_CRLF_FAIL */
die("LF would be replaced by CRLF in %s", path);
由convert.c#crlf_to_git()
调用,由convert.c#convert_to_git()
调用,由convert.c#renormalize_buffer()
调用。
最后renormalize_buffer()
仅由merge-recursive.c#blob_unchanged()
调用。
所以我怀疑只有当所述提交是合并过程的一部分时,才会在git commit
上发生此转换。
注意:使用Git 2.17(2018年第二季度),代码清理会增加一些解释。
commit 8462ff4见Torsten Bögershausen (tboegi
)(2018年1月13日)
(由Junio C Hamano -- gitster
--合并于commit 9bc89b1,2018年2月13日)
convert_to_git():safe_crlf / checksafe成为int conv_flags
调用
convert_to_git()
时,checksafe
参数定义了什么 如果EOL转换(CRLF --> LF --> CRLF
)没有,则会发生 干净地往返。
此外,它还定义了行结尾是否应重新规范化(CRLF --> LF
)或保持不变。checksafe是具有以下值的
safe_crlf
枚举:
SAFE_CRLF_FALSE: do nothing in case of EOL roundtrip errors
SAFE_CRLF_FAIL: die in case of EOL roundtrip errors
SAFE_CRLF_WARN: print a warning in case of EOL roundtrip errors
SAFE_CRLF_RENORMALIZE: change CRLF to LF
SAFE_CRLF_KEEP_CRLF: keep all line endings as they are
请注意8462ff4中引入的回归(“convert_to_git()
:
{GID 2.17}中的safe_crlf/checksafe
变为int conv_flags
“,2018-01-13,Git 2.17.0)导致autocrlf
重写产生警告消息
尽管设置了safecrlf=false
。
commit 6cb0912见Anthony Sottile (asottile
)(2018年6月4日)
(由Junio C Hamano -- gitster
--合并于commit 8063ff9,2018年6月28日)
答案 1 :(得分:19)
是警告是倒退的。
事实上,它首先应该不是警告。因为所有这些警告都说(但不幸的是倒退)是带有Windows行结尾的文件中的CRLF字符将在提交时被替换为LF。这意味着它被标准化为* nix和MacOS使用的相同行结尾。
没有什么奇怪的事情发生,这正是你通常想要的行为。
此警告的当前形式是以下两种情况之一:
)
答案 2 :(得分:14)
否即可。这是正确和准确的。它不是在谈论目前使用CRLF
的文件。而是用LF
来讨论文件。
应该是:
警告:(如果您使用当前的core.autocrlf配置将其签出/或克隆到另一个文件夹),则LF将替换为CRLF
该文件的原始行结尾位于您的(当前)工作目录中。
答案 3 :(得分:9)
所有这一切都假定为core.autocrlf=true
原始错误:
警告:LF将由CRLF替换 该文件将在您的工作目录中具有其原始行结尾。
错误应该是什么:
警告:LF将被工作目录中的CRLF 替换
中具有其原始LF行结尾
该文件将在git存储库
解释here:
这种方便转换的副作用,这就是你所看到的警告,就是如果你最初创作的文本文件有LF结尾而不是CRLF,它将与LF一起存储通常情况下,但稍后退房时会有CRLF结尾。对于普通文本文件,这通常很好。警告是"为了您的信息"在这种情况下,但是如果git错误地将二进制文件评估为文本文件,则这是一个重要的警告,因为git会破坏您的二进制文件。
基本上,以前LF的本地文件现在将具有本地CRLF
答案 4 :(得分:2)
git config --global core.autocrlf false
适用于全局设置。
但是如果您使用的是Visual Studio,可能还需要为某些类型的项目修改.gitattributes
(例如c#class library application ):
* text=auto
答案 5 :(得分:1)
在我设置core.autocrlf=true
之后,我得到了" LF将被CRLF取代" (注意不是" CRLF将由LF"替换)当我git add
(或者它可能是在git commit
上?)在存储库的Windows中编辑的文件时(确实如此)使用LF)在我设置core.autocrlf=true
之前检出。
我使用core.autocrlf=true
进行了新的结帐,现在我没有收到这些消息。
答案 6 :(得分:1)
发生这种情况是因为 Windows 上的 GitHub Desktop 配置假定为 CRLF,但文本编辑器可能正在使用 LF。您可以更改本地存储库设置以改用 git config core.eol lf
git config core.autocrlf input
。
导航到 git repo 的根目录并以完全相同的顺序执行
Query:
SYSTEM RELOAD DICTIONARY dim_subject_movie
Received exception from server:
Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Exception: Connections to all replicas failed: frodo@mysql1:3306 as user test, frodo@mysql1:3306 as user test (version 21.3.10.1 (official build))
答案 7 :(得分:0)
做一件简单的事情: 1.打开git-hub(Shell)并导航到属于的目录文件(cd / a / b / c / ...) 2.执行dos2unix(有时dos2unix.exe) 3.现在尝试提交。 如果再次出现相同的错误。 执行以上所有步骤,而不是dos2unix,执行unix2dox(某些时候是unix2dos.exe)
答案 8 :(得分:0)
我遇到了类似的问题,在 Windows 上使用 vscode(v1.57) 尝试了其他答案中定义的解决方案,但没有奏效。
所以对我来说以下步骤有效:
end_of_line = lf
更改 end_of_line = crlf
git rm --cached
,警告消失!!答案 9 :(得分:0)
确保您在 .gitignore
文件中添加了不必要的文件或文件夹。
例如
node_modules
如果仍然面临,则运行此命令
``git config --global core.autocrlf false```
答案 10 :(得分:-1)
如果您使用的是Visual Studio 2017、2019,则可以:
[core]
autocrlf = false
[filter "lfs"]
required = true
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process