为什么“更新的Git指标不合格”显示(Why is 'Updating the Git in

2019-07-29 08:42发布

我使用Windows。 当暂存文件我得到这个错误。

Updating the Git index failed. A rescan will be automatically started to resynchronize git-gui.

随后已经从LF转换为CRLF文件列表

很多上使用Git使用跨平台的CRLF / LF发布阅读后,我多多少少明白是怎么回事,我试图确定哪些autocrlf设置是最适合我的,但我无法理解为什么Git的说,更新指标不合格。 我的理解是,它已经转换的EOF的那么什么是这个问题,为什么它告诉我,更新索引失败。 我是否需要修复某些东西(除了选择合适的autocrlf设置)或我可以继续

然后,我有两个选择继续和解锁指数,这分别意味着什么,什么是最好的行动过程。

Answer 1:

git config --global core.autocrlf false

一直是我的建议(见“ (在Windows msysgit Git的1.6.4测试版) - Unix或DOS行终止 ”)。

然而,在你的情况,你可以“继续”,但这个警告是有提及某些文件可能不可逆的转换:

core.safecrlf

如果为真,使得GIT中检查,如果转换CRLF是可逆的,当结束线转换是有效的。 如果一个命令直接或间接地改变在工作树中的文件,Git会验证。 例如,提交文件,然后检查出相同的文件应该产生原始文件在工作树。 如果这不是当前设置的情况下core.autocrlf ,git会拒绝该文件。
该变量可以被设置为“警告”,在这种情况下git会仅警告一个不可逆的转换,但继续操作。

如果你不想看到这个警告,在解释这个线程 ,你可以设置core.safecrlffalse

你也可以通过git的GUI的工具菜单中藏匿您的文件,并添加了一些选项,这些工具有,例如,这个混帐配置文件 。
兴趣是,对于每一个工具,你可以添加:

guitool.<name>.norescan

该工具完成执行后不要重新扫描工作目录更改。


能否请您阐述一下解锁指数位

你可以看到在该消息index.tcl混帐GUI脚本 :撤销index.lock文件操作索引时的混帐GUI创建。
你可以在看到更多的“锁文件API”文档页面 :

互斥
当我们编写了一个新的索引文件,首先我们创建一个新文件$GIT_DIR/index.lock ,写入新的内容进去,并将其重命名为最终目标$GIT_DIR/index
我们尝试创建$GIT_DIR/index.lock与文件O_EXCL ,使我们可以注意到,当别人已经在试图更新索引文件失败。



Answer 2:

我也遇到了这个即使寿我core.autocrlf设置已经是false ,并core.safecrlf未设置。 我怀疑罪魁祸首是配置设置diff.astextplain.textconv

当我跑git config --list ,以下行被显示在输出:

diff.astextplain.textconv=astextplain

我不认为这个设置其实是相关的警告/错误,但它激发了我考虑这样做可能正在做文本转换。 在网上和我的回购有点洞穴探险之后,我发现在我的回购的.gitattributes文件下面一行:

* text=auto

[我大概得到了.gitattributes从GitHub文件。]

鉴于只有上面的线是联合国评价它,并进一步指出,对付“AUTOMAGIC”行结束转换一直很头疼,我选择从我的回购协议中删除该文件。 这样做,分期相同的文件后,系统不再提示我“更新的Git指标不合格”警告/错误。



Answer 3:

TL; DR:此警告意味着混帐可能返回您在Windows风格的文本文件,尽管在UNIX风格的一个文本文件,你已经检查。

UNIX和Windows在如何保存在文本文件换行符不同。 维基百科有一个换行符在不同的操作系统列表

你得到的警告是可重复的,如果你做到以下几点在Windows上:

  • 在空目录中创建一个Git仓库
  • 创建提交代表回购的初期,空状态:

     git commit --allow-empty -m "initial commit" 
  • 使用git config core.autocrlfgit config core.safecrlf以验证autocrlf被设置为truesafecrlf未设置(不输出)。 如果不是这种情况,使用下面的命令来设置他们

     git config core.autocrlf true git config --unset core.safecrlf 
  • 用记事本++编写称为文本文件text.txt UNIX格式。 写这至少有一个换行符的文件。 这是你如何选择UNIX行尾:

  • git add text.txt 。 你得到警告消息

    警告:LF将CRLF的text.txt中被替换。
    该文件将有原来的行结束在你的工作目录。

  • 提交的文本文件:`git的承诺-m“与UNIX结尾添加文件”

  • 现在看到这个文件的样子,如果你从树上检查出来等。 首先,检查出的版本创建的文件之前(去1提交回)。 该文件text.txt从工作目录中消失:

     git checkout ~1 
  • 现在,还原的版本创建的文件后,

     git checkout master 

该文件text.txt恢复。 但是,在记事本++打开它,并检查线路在记事本++的底部状态行结束格式:

你签出的文件具有Windows风格的行尾,但你COMMITED文件有UNIX风格的文件结尾! 这是警告消息是什么: 这些设置core.autocrlf=true一起core.safecrlf=<unset>意味着你从树还原的文件可能是从你检查的文件不同,因为他们可能有不同的文件结尾。



文章来源: Why is 'Updating the Git index failed' displayed