2012-05-13 73 views
40

我正在使用Windows。當登臺文件時,我得到這個錯誤。爲什麼顯示'更新Git索引失敗'

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

隨後已經從LF轉換成CRLF

了很多關於使用Git使用跨平臺的CRLF/LF發佈讀取完畢後的文件列表,我或多或少理解發生了什麼,我試圖確定哪個autocrlf設置對我來說最合適,但我不明白爲什麼Git說更新索引失敗。我的理解是它已經轉換了EOF,所以這有什麼問題,爲什麼它告訴我更新索引失敗了。我需要修復一些東西(除了選擇適當的autocrlf設置)還是隻能繼續

然後我有兩個選項Continue和Unlock Index,這些意味着什麼,什麼是最佳行動方案。

+0

可能重複的[LF將被在git中的CRLF取代 - 這是什麼,它是重要的?](https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf- in-git-what-that-and-it-it-important) –

回答

40
git config --global core.autocrlf false 

一直是我的建議(參見「Git 1.6.4 beta on Windows (msysgit) - Unix or DOS line termination」)。

然而,在你的情況,你可以「繼續」,但這個警告是有提及某些文件的轉換可能不可逆的:

core.safecrlf 

如果爲真,使得git的檢查,如果轉換當生產線末端轉換處於活動狀態時,CRLF是可逆的。 Git將驗證命令是直接還是間接地修改工作樹中的文件。例如,提交文件後檢出相同的文件應該在工作樹中產生原始文件。如果不是當前設置爲core.autocrlf的情況,那麼git將拒絕該文件。
變量可以設置爲「警告」,在這種情況下,git只會警告不可逆轉換,但會繼續運行。

如果你不想看到這個警告,如this thread解釋,你可以設置core.safecrlffalse

你也可以通過git gui的工具菜單來存儲你的文件,併爲這些工具添加一些選項,例如,這個git config file
興趣的是,對於每一個工具,你可以添加:

guitool.<name>.norescan 

不要重新掃描工作目錄更改的工具完成執行後。


能否請您詳細闡述一下就解鎖指數

你可以看到消息在index.tcl git-gui script:撤銷index.lock文件的混帳GUI操控時會自動創建指數。
您可以在"lockfile API" documentation page看多:

互斥
當我們寫出一個新的索引文件時,首先我們創建一個新文件$GIT_DIR/index.lock,將新內容寫入其中,並將其重命名爲最終目標$GIT_DIR/index
我們嘗試使用O_EXCL創建$GIT_DIR/index.lock文件,以便在其他人已嘗試更新索引文件時我們可以注意到並失敗。

+1

感謝您的全面回答,但您提到了幾次警告,但這正是我的問題,並不意味着它是警告,而是錯誤。 '更新Git索引失敗'...或者我誤解了這個? – byronyasgur

+0

@byronyasgur我在答案中提到的線程將此消息稱爲「警告」,我想是因爲它不會*失敗*完全是git命令。它只會打斷它,要求你做出選擇(除非你指定「'norescan'」或'core.safecrlf'爲'false') – VonC

+0

我開始明白了。你能解釋這兩種選擇之間的區別還是將我指向一種資源,我似乎無法找到在這種情況下解鎖和繼續的含義。 – byronyasgur

1

我也遇到了這個即使壽我core.autocrlf設置已經falsecore.safecrlf未設置。我懷疑罪魁禍首是配置設置diff.astextplain.textconv

當我跑git config --list,下面一行是在輸出中顯示:

diff.astextplain.textconv=astextplain 

我不認爲這個設置其實是相關的警告/錯誤,但它激發了我尋找到文本轉換是可能正在完成。在網上和我的回購有點洞穴探險之後,我發現下面一行在我回購的.gitattributes文件:

* text=auto 

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

鑑於只有上面一行沒有評論,而且處理'automagic'行結束轉換有總是一直很頭疼,我選擇從我的回購中刪除該文件。這樣做後,暫存相同的文件不再提示我「更新Git索引失敗」警告/錯誤。