4

我突然有一些文件显示为已修改,但 KDiff 说它们是二进制相等的。还原和丢弃这些更改什么也做不了。

不知何故,启用了 eol 扩展,当我尝试禁用它时,我无法在 TortoiseHg 中查看一个 repo 的工作目录。出现错误:

【错误6】句柄无效

使用命令行时hg status,出现此错误:

'cleverencode:' 不是内部或外部命令、可运行程序或批处理文件。

使用时hg revert myfile,会生成 .orig 文件,但文件仍显示为已修改,并且出现上述相同的错误。

当更新到以前的提交时,很多其他文件都处于与我现在的少数相同的情况。

如有必要,我可以扔掉这个克隆并制作一个新的克隆,但如果不这样做就可以解决这个问题,那就太好了。

4

2 回答 2

9

能够解决它。

我的 global mercurial.ini中有一些内容cleverencode。删除这些后,问题就消失了。启用/禁用 eol 扩展似乎也不再引起任何问题。

我怀疑麻烦制造者是 Atlassian 的 SourceTree,我昨天安装了一个更新,它询问是否应该启用自动行结束处理。我很确定我没有选中它,无论如何,它似乎混合了eol配置和win32text配置。

另请参阅:[SRCTREEWIN-708] Mercurial 行尾处理配置可能出错 - Atlassian JIRA

于 2013-06-28T10:27:13.073 回答
0

我发现cleverencode 对我不起作用——我的mercurial.ini 中没有它。我的案例也是一个二进制文件,它神秘地被标记为已修改,并且不会随着恢复、清理等而消失......

我做了一些探索并修复了它:有一个 repo/.hg/largefiles 目录。我相信 mercurial 将其保留为二进制文件的本地缓存,以便恢复更改。在这个目录中,你会看到一堆十六进制的文件名。在 TortoiseHg 中“浏览”导致问题的二进制文件。它会向您显示与您的二进制文件相对应的十六进制代码。在 largefiles 目录中找到该文件并将其删除。

您现在应该能够将文件恢复为未更改的状态。我认为 mercurial 使用 largefiles 版本首先恢复。然后,当此版本与 repo 版本不匹配时,它会被标记为已修改(在我的情况下,我的二进制文件以某种方式被截断为 0 长度)并且永远不会消失。

如果您无法匹配十六进制名称,您也可以完全删除 largefiles 目录。它将根据需要重新创建。我认为唯一的影响是执行一些二进制文件操作需要更长的时间,因为它必须转到服务器。

于 2014-01-17T16:04:22.647 回答