我突然有一些文件显示为已修改,但KDiff说它们是二进制相等的。恢复和放弃这些更改不会做任何事情。
不知何故,eol扩展已启用,当我尝试禁用它时,我无法在TortoiseHg中查看一个repo的工作目录。出现错误:
[错误6]句柄无效
使用命令行hg status
时,会出现此错误:
'cleverencode:'不被识别为内部或外部命令, 可操作程序或批处理文件。
使用hg revert myfile
时,会生成.orig文件,但文件仍显示为已修改,并显示上述相同的错误。
当更新到之前的提交时,很多其他文件会像我现在拥有的那些文件一样处于相同的状态。
如果有必要,我可以扔掉这个克隆并制作一个新的克隆,但如果不这样做就能解决这个问题会很好。
答案 0 :(得分:9)
能够解决它。
我的全球 mercurial.ini 中有一些行cleverencode
。删除后,问题就消失了。启用/禁用eol扩展程序似乎也不会引起任何问题。
我怀疑麻烦制造者是Atlassian的SourceTree,我昨天安装了一个更新,它询问是否应该启用自动行结束处理。我很确定我取消选中它,无论如何,似乎已将 eol 配置与 win32text 配置混合。
另请参阅:[SRCTREEWIN-708] Possible error with Mercurial line ending handling configuration - Atlassian JIRA
答案 1 :(得分:0)
我发现cleverencode对我不起作用 - 我没有在mercurial.ini中使用它。我的案例也是一个二进制文件,神秘地被标记为已修改,并且不会随着恢复,清理等而消失......
我做了一些探索并修复它:那里有一个repo / .hg / largefiles目录。我相信mercurial会将其保留为二进制文件的本地缓存,以便还原更改。在这个目录中,你会看到一堆十六进制的文件名。在TortoiseHg"浏览"导致问题的二进制文件。它会显示与您的二进制文件对应的十六进制代码。在largefiles目录中找到该文件并将其删除。
您现在应该可以将文件还原为未更改。我认为mercurial首先使用largefiles版本进行恢复。然后,当这个版本与repo版本不匹配时,它会被标记为已修改(在我的情况下,我的二进制文件以某种方式被截断为0长度)并且永远不会消失。
如果你不能匹配十六进制名称,你也可以完全删除largefiles目录。它将根据需要重新创建。我认为唯一的影响是它需要更长时间才能完成一些二进制文件操作,因为它必须转到服务器。