环境:
- Windows 7的
- msysgit
当我git commit
,它说:
warning: LF will be replaced by CRLF.
这个警告尾巴是向后的吗?
我在 Windows 中编辑文件,行尾是CRLF
,就像这张图片:
并且 git 将其更改为LF
以提交 repo。
所以我认为正确的警告是:
warning: CRLF will be replaced by LF.
环境:
当我git commit
,它说:
warning: LF will be replaced by CRLF.
这个警告尾巴是向后的吗?
我在 Windows 中编辑文件,行尾是CRLF
,就像这张图片:
并且 git 将其更改为LF
以提交 repo。
所以我认为正确的警告是:
warning: CRLF will be replaced by LF.
警告:LF 将被 CRLF 取代。
根据您使用的编辑器,带有 LF 的文本文件不必使用 CRLF 保存:最近的编辑器可以保留eol 样式。但是那个 git config 设置坚持要改变那些......
只需确保(正如我在这里推荐的那样):
git config --global core.autocrlf false
这样,您可以避免任何自动转换,并且仍然可以通过.gitattributes
文件和core.eol
指令指定它们。
windows git“LF将被CRLF取代”
这个警告尾巴向后吗?
否:您使用的是 Windows,并且git config
帮助页面确实提到了
CRLF
如果即使存储库没有规范化的行尾,您也希望在工作目录中有行尾,请使用此设置。
如“ git 用 CRLF 替换 LF ”中所述,它应该只发生在结帐(而不是提交)时,使用core.autocrlf=true
.
repo
/ \
crlf->lf lf->crlf
/ \
警告:(如果您将其签出/或使用当前
core.autocrlf
配置克隆到另一个文件夹,)LF 将被替换为 CRLF
该文件将在您的(当前)工作目录中具有其原始行结尾。
如git-for-windows/git
问题 1242中所述:
file.json
我仍然觉得此消息令人困惑,可以扩展该消息以包含对该问题的更好解释,例如:“删除文件并再次检出后,LF 将被 CRLF 替换”。
注意:Git 2.19(2018 年 9 月),当使用 时core.autocrlf
,虚假的“LF 将被 CRLF 替换”警告现在被抑制。
正如quaylar正确评论的那样,如果提交时有转换,则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 年第二季度),代码清理增加了一些解释。
请参阅Torsten Bögershausen ( ) 的commit 8462ff4(2018 年 1 月 13 日)。(由Junio C Hamano 合并——在提交 9bc89b1中,2018 年 2 月 13 日)tboegi
gitster
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
请
注意,尽管设置了. _ _
convert_to_git()
safe_crlf/checksafe
int conv_flags
autocrlf
safecrlf=false
请参阅Anthony Sottile ( ) 的提交 6cb0912(2018 年 6 月 4 日)。(由Junio C Hamano 合并 -- --在8063ff9 提交中,2018 年 6 月 28 日)asottile
gitster
是的,警告是向后的。
事实上,它甚至不应该是一个警告。因为所有这些警告都在说(但不幸的是倒退)是文件中带有 Windows 行结尾的 CRLF 字符将在提交时被替换为 LF。这意味着它被标准化为 *nix 和 MacOS 使用的相同行尾。
没有什么奇怪的事情发生,这正是您通常想要的行为。
当前形式的此警告是以下两种情况之一:
;)
所有这一切都假设core.autocrlf=true
原始错误:
警告:LF 将被替换为 CRLF
该文件将在您的工作目录中具有其原始行结尾。
错误应该读什么:
警告:LF 将在您的工作目录中替换为 CRLF 该文件将在 git 存储库中
具有其原始 LF 行结尾
这里的解释:
这种方便转换的副作用,这就是您所看到的警告,如果您最初创作的文本文件以 LF 结尾而不是 CRLF 结尾,它将像往常一样与 LF 一起存储,但是当检查时稍后会出现 CRLF 结尾。对于普通的文本文件,这通常很好。在这种情况下,警告是“供您参考”,但如果 git 错误地将二进制文件评估为文本文件,这是一个重要的警告,因为 git 会破坏您的二进制文件。
基本上,以前是 LF 的本地文件现在将在本地具有 CRLF
git config --global core.autocrlf false
适用于全局设置。
但如果您使用的是 Visual Studio,可能还需要.gitattributes
针对某些类型的项目进行修改(例如 c# 类库应用程序):
* text=auto
发生这种情况是因为 Windows 上的 GitHub Desktop 的配置假定为 CRLF,但文本编辑器可能正在使用 LF。您可以更改本地存储库设置以改为使用lf
。
导航到 git repo 的根目录并以完全相同的顺序执行
git config core.eol lf
git config core.autocrlf input
在我设置之后,当我正在(或者可能是它在?)在存储库的 Windows 中编辑文件core.autocrlf=true
时,我得到“LF 将被 CRLF 替换”(注意不是“CRLF 将被 LF 替换”)LF)在我设置.git add
git commit
core.autocrlf=true
我做了一个新的结帐,core.autocrlf=true
现在我没有收到这些消息。
关闭 Visual Studio
如果您收到错误,一个简单的修复方法是关闭 Visual Studio,然后您可以提交到 main,就这么简单。我有同样的问题,这就是我解决它的方法。这是因为您要打开的文件在另一个程序中打开。
确保在文件中添加了不必要的文件或文件夹.gitignore
。
例如
node_modules
如果仍然面对然后运行此命令
``git config --global core.autocrlf false```
我遇到了类似的问题并在 Windows 上使用 vscode(v1.57) 尝试了其他答案中定义的解决方案,但没有奏效。
所以对我来说,以下步骤有效:
end_of_line = lf
为end_of_line = crlf
git rm --cached
和警告消失了!!做简单的事:
如果您使用的是 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