我使用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设置)或我可以继续
然后,我有两个选择继续和解锁指数,这分别意味着什么,什么是最好的行动过程。
git config --global core.autocrlf false
一直是我的建议(见“ (在Windows msysgit Git的1.6.4测试版) - Unix或DOS行终止 ”)。
然而,在你的情况,你可以“继续”,但这个警告是有提及某些文件可能不可逆的转换:
core.safecrlf
如果为真,使得GIT中检查,如果转换CRLF是可逆的,当结束线转换是有效的。 如果一个命令直接或间接地改变在工作树中的文件,Git会验证。 例如,提交文件,然后检查出相同的文件应该产生原始文件在工作树。 如果这不是当前设置的情况下core.autocrlf
,git会拒绝该文件。
该变量可以被设置为“警告”,在这种情况下git会仅警告一个不可逆的转换,但继续操作。
如果你不想看到这个警告,在解释这个线程 ,你可以设置core.safecrlf
给false
。
你也可以通过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
,使我们可以注意到,当别人已经在试图更新索引文件失败。
我也遇到了这个即使寿我core.autocrlf
设置已经是false
,并core.safecrlf
未设置。 我怀疑罪魁祸首是配置设置diff.astextplain.textconv
。
当我跑git config --list
,以下行被显示在输出:
diff.astextplain.textconv=astextplain
我不认为这个设置其实是相关的警告/错误,但它激发了我考虑这样做可能正在做文本转换。 在网上和我的回购有点洞穴探险之后,我发现在我的回购的.gitattributes文件下面一行:
* text=auto
[我大概得到了.gitattributes从GitHub文件。]
鉴于只有上面的线是联合国评价它,并进一步指出,对付“AUTOMAGIC”行结束转换一直很头疼,我选择从我的回购协议中删除该文件。 这样做,分期相同的文件后,系统不再提示我“更新的Git指标不合格”警告/错误。
TL; DR:此警告意味着混帐可能返回您在Windows风格的文本文件,尽管在UNIX风格的一个文本文件,你已经检查。
UNIX和Windows在如何保存在文本文件换行符不同。 维基百科有一个换行符在不同的操作系统列表
你得到的警告是可重复的,如果你做到以下几点在Windows上:
- 在空目录中创建一个Git仓库
创建提交代表回购的初期,空状态:
git commit --allow-empty -m "initial commit"
使用git config core.autocrlf
和git config core.safecrlf
以验证autocrlf
被设置为true
和safecrlf
未设置(不输出)。 如果不是这种情况,使用下面的命令来设置他们
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>
意味着你从树还原的文件可能是从你检查的文件不同,因为他们可能有不同的文件结尾。