ENV:
我git commit说,它说:
warning: LF will be replaced by CRLF.
Run Code Online (Sandbox Code Playgroud)
这个警告尾巴落后了吗?
我在Windows中编辑文件,行尾是CRLF,就像这张图:

并且git将其更改LF为承诺回购.
所以我认为正确的警告是:
warning: CRLF will be replaced by LF.
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 156
警告:LF将被CRLF取代.
根据您使用的编辑器,使用LF的文本文件无需与CRLF一起保存:最近的编辑器可以保留 eol样式.但是那个git配置设置坚持要改变那些......
只需确保(我在这里推荐):
git config --global core.autocrlf false
Run Code Online (Sandbox Code Playgroud)
这样,您可以避免任何自动转换,并且仍然可以通过.gitattributes文件和core.eol指令指定它们.
windows git"LF将被CRLF取代"
这个警告尾巴是否落后?
否:您在Windows上,git config帮助页面确实提到了
如果要
CRLF在工作目录中包含行结尾,请使用此设置,即使存储库没有标准化的行结尾.
如" git用CRLF替换LF "中所描述的那样,它应该仅在结账时(不提交)发生core.autocrlf=true.
repo
/ \
crlf->lf lf->crlf
/ \
Run Code Online (Sandbox Code Playgroud)
警告:(如果您使用当前
core.autocrlf配置检出/或克隆到另一个文件夹,)LF将被CRLF替换.
该文件将在您的(当前)工作目录中具有其原始行结尾.
我仍然觉得这个消息令人困惑,可以扩展消息以包含对问题的更好解释,例如:"
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);
Run Code Online (Sandbox Code Playgroud)
它被称为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年第二季度),代码清理会增加一些解释.
见提交8462ff4(2018年1月13日)由托斯滕Bögershausen( )tboegi.
(由Junio C gitsterHamano合并- -在提交9bc89b1,2018年2月13日)
convert_to_git():safe_crlf/checksafe成为int conv_flags
调用时
convert_to_git(),checksafe参数定义了如果EOL conversion(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
Run Code Online (Sandbox Code Playgroud)
请注意,在Git 2.17循环中,8462ff4(" convert_to_git():
safe_crlf/checksafe变成int conv_flags",2018-01-13,Git 2.17.0)中引入的回归导致autocrlf重写产生警告消息,
尽管设置safecrlf=false.
见Anthony Sottile()提交6cb0912(2018年6月4日).(由Junio C Hamano合并- -在提交8063ff9,2018年6月28日)asottile
gitster
Sti*_*itt 23
是的警告是倒退的.
事实上,它首先应该不是警告.因为所有这些警告都说(但不幸的是倒退)是带有Windows行结尾的文件中的CRLF字符将在提交时替换为LF.这意味着它被标准化为*nix和MacOS使用的相同行结尾.
没有什么奇怪的事情发生,这正是你通常想要的行为.
它当前形式的警告是两件事之一:
;)
Xia*_*com 17
不.这是正确和准确的.它不是在讨论你目前使用的文件CRLF.而是用文件来讨论文件LF.
它应该是:
警告:( 如果您使用当前的core.autocrlf配置检出/或克隆到另一个文件夹,)LF将被CRLF取代
该文件将在(当前)工作目录中具有其原始行结尾.
mik*_*kew 12
所有这一切都假设了 core.autocrlf=true
原始错误:
警告:LF将被CRLF替换
该文件将在您的工作目录中具有其原始行结尾.
错误应该读什么:
警告:LF将在工作目录中被CRLF替换.
该文件将在git存储库中具有其原始LF行结尾
这里的解释:
这个方便转换的副作用,这就是你所看到的警告,就是如果你最初创作的文本文件有LF结尾而不是CRLF,它将像往常一样用LF存储,但是当检查时以后它会有CRLF结局.对于普通文本文件,这通常很好.在这种情况下,警告是"为了您的信息",但是如果git错误地将二进制文件评估为文本文件,那么这是一个重要的警告,因为git会破坏您的二进制文件.
基本上,以前LF的本地文件现在将在本地具有CRLF
avp*_*avp 10
发生这种情况是因为 Windows 上的 GitHub Desktop 配置假定使用 CRLF,但文本编辑器可能使用 LF。您可以更改本地存储库设置来lf代替使用。
导航到 git 存储库的根目录并以完全相同的顺序执行此操作
git config core.eol lf
git config core.autocrlf input
Run Code Online (Sandbox Code Playgroud)
git config --global core.autocrlf false 适用于全局设置。
但是,如果您使用的是Visual Studio,则可能还需要修改.gitattributes某些类型的项目(例如c#类库应用程序):
* text=auto| 归档时间: |
|
| 查看次数: |
169546 次 |
| 最近记录: |