为什么显示“更新Git索引失败”

我正在使用Windows。 当登台文件时,我得到这个错误。

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

接着是从LF到CRLF转换的文件列表

在使用Git使用跨平台对CRLF / LF问题进行大量的阅读后,我或多或less地理解了这个问题,并且试图确定哪个autocrlf设置最适合我,但我不明白为什么Git会说更新索引失败。 我的理解是,它已经转换了EOF,所以有什么问题,为什么它告诉我,更新索引失败了。 我是否需要修复某些内容(除了select适当的autocrlf设置)或者我可以继续

然后我有两个select继续和解锁索引,这是什么意思,什么是最好的行动。

 git config --global core.autocrlf false 

一直是我的build议(见“ Windows(msysgit)上的Git 1.6.4 beta – Unix或DOS行终止 ”)。

然而,就你而言,你可以“继续”,但是这个警告提到某些文件的转换可能是不可逆的:

 core.safecrlf 

如果为true,则使git检查在行结束转换处于活动状态时转换CRLF是否可逆。 Git会validation命令是直接还是间接地修改工作树中的文件。 例如,提交文件,然后检出相同的文件,应该在工作树中生成原始文件。 如果core.autocrlf的当前设置不是这种情况,那么git会拒绝这个文件。
variables可以设置为“警告”,在这种情况下,git只会警告不可逆的转换,但继续操作。

如果您不希望看到此警告,则可以将core.safecrlf设置为false

你也可以通过git gui的工具菜单来保存你的文件,并且用这个gitconfiguration文件为这些工具添加一些选项。
兴趣是,对于每个工具,你可以添加:

 guitool.<name>.norescan 

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


请您详细解释一下解锁索引

你可以在index.tcl git-gui脚本中看到这个消息:它删除了git-gui在操作索引时创build的index.lock文件。
你可以在“lockfile API”文档页面看到更多的内容 :

相互排斥
当我们写出一个新的索引文件时,首先我们创build一个新文件$GIT_DIR/index.lock ,将新内容写入它,并将其重命名为最终目标$GIT_DIR/index
我们尝试使用O_EXCL创build$GIT_DIR/index.lock文件,这样当其他人已经尝试更新索引文件时,我们可以注意到并失败。

我也遇到了这个问题,甚至我的core.autocrlf设置已经是falsecore.safecrlf未设置。 我怀疑罪魁祸首是configuration设置diff.astextplain.textconv

当我运行git config --list ,在输出中显示了以下行:

 diff.astextplain.textconv=astextplain 

我不认为这个设置实际上与警告/错误有关,但是它激励我研究可能正在完成的文本转换。 在网上和我的回购一小段spelunking后,我发现我的回购的.gitattributes文件中的以下行:

 * text=auto 

[我可能从GitHub获得了.gitattributes文件。]

考虑到只有上面这一行没有评论,而且进一步处理“自动化”的行结束转换一直是一个头痛的问题,所以我select从我的回购中删除该文件。 这样做后,暂存相同的文件不再提示我“更新Git索引失败”的警告/错误。