2013-06-28 20 views
4

我突然有幾個文件顯示爲已修改,但KDiff表示它們是二進制平等的。恢復和丟棄這些更改什麼也不做。二進制平等文件顯示爲已修改,無法恢復

不知何故,eol擴展已啓用,當我嘗試禁用它時,我無法在TortoiseHg中查看該回購的工作目錄。出現一個錯誤:

[錯誤6]的句柄無效

當使用命令行hg status,將出現這樣的錯誤:

'cleverencode:' 沒有被識別爲一個內部或外部命令, 可操作的程序或批處理文件。

使用hg revert myfile時,生成.orig文件,但文件仍然顯示爲已修改,並且出現上述相同的錯誤。

當更新到以前的提交時,一大堆其他文件會出現像我現在所擁有的那些相同的情況。

如果有必要,我可以扔掉這個克隆並製作一個新的克隆,但如果不這樣做就可以解決這個問題,那將會很好。

回答

9

能夠解決它。

我的全球mercurial.ini在其中有cleverencode的一些行。刪除之後,問題消失了。啓用/禁用eol擴展也似乎不再引起任何問題。

我懷疑麻煩製造者是Atlassian的SourceTree,我昨天安裝了一個更新,它詢問是否應該啓用自動行結束處理。我很確定我沒有選中它,無論如何,它似乎混合eol配置與win32text配置。

參見:[SRCTREEWIN-708] Possible error with Mercurial line ending handling configuration - Atlassian JIRA

+0

感謝分享,爲我節省了一些時間。 –

0

我發現cleverencode並沒有爲我工作 - 我沒有在我的mercurial.ini。我的情況也是一個二進制文件,神祕地被標記爲已修改,並不會因回覆,乾淨等而消失...

我做了一些修改並修復了它:有一個repo/.hg/largefiles目錄。我相信mercurial會將其保存爲二進制文件的本地緩存以恢復更改。在這個目錄中,你會看到一堆十六進制文件名。在TortoiseHg中「瀏覽」導致問題的二進制文件。它會顯示與您的二進制文件相對應的十六進制代碼。在largefiles目錄中找到該文件並將其刪除。

您現在應該可以將文件恢復爲原樣。我認爲mercurial使用大文件版本首先恢復。然後,當這個版本與回購版本不匹配時,它會被標記爲已修改(在我的情況下,我的二進制文件以某種方式被截斷爲0)並且永遠不會消失。

如果無法匹配十六進制名稱,您也可以只刪除largefiles目錄。它會根據需要重新創建。我認爲唯一的影響是,執行一些二進制文件操作需要更長的時間,因爲它將不得不去服務器。

+0

聽起來像是一個完全不同的問題,但感謝您發佈答案。 (注意:*二進制平等文件*表示它們100%相等,不是它們是*二進制文件*本身) – Stijn

+0

不同的問題,但類似的症狀。我的公司有我們的回購設置要求大文件擴展名(我不知道如果一個二進制文件必須是一個大文件或反之亦然,這個問題是特定於大文件擴展名)。顯然,網絡上有關於此擴展的警告是因爲它打破了分佈式源代碼控制模型......並導致出現這樣的問題。 – Edg