我的问题是这样的:当Mercurial没有改变时,通过“状态”或者TortoiseHgWorkbench文件将文件指定为“已修改”可能是什么原因?hg显示修改的文件不变,为什么可能是?
下面是情况:我有一个本地到Linux机器的存储库。我只使用Linux机器上的存储库。不过,我确实在Windows机器上有一个存储库(和工作文件)的副本(我使用BeyondCompare通过闪存驱动器进行同步)。回想起来,我从不在Windows机器上调用mercurial,尽管它安装在那里。
我最近想在Linux机器上做一个提交,并且我没想到会显示的许多文件都被列为“修改”。我做了一个视觉比较(使用BeyondCompare),它指示工作目录副本与存储库中的父项“二进制相同”。 TortoiseHgWorkbench显示文件“修改”,差异窗口显示整个文件,绿色,(如果知识库有一个空文件,我猜)。在有问题的文件上,文件系统上的文件日期是几个月前的,而我上一次提交(我提交所有更改的文件)是在几周前。一些未更改的文件显示为“修改”,但有些不显示。我以前从未见过这种行为,所以我有点困惑。
我在版本库上运行了“hg verify”,它没有注意到任何有趣的内容。
我想这不是什么大问题,因为工作目录中的所有文件都是完整的,如果我要提交这些文件(尽管它们没有改变),我不确定会有什么伤害。但我很想了解发生了什么。
在此先感谢您的任何想法,寻找什么。
[编辑]
还没有找到根本原因(文件权限和访问日期不变),但@ barjak的回应指出我在,我发现这个方向:Why does "hg status" show changed files when "hg diff -g" doesn't? (One parent)。我的情况与此处描述的相同(hg diff和hg diff --git只显示真正更改的文件,而hg status显示一些未更改的文件)。顺便说一下我正在使用汞2.6。
[编辑]
如果是有帮助的人,这里是我如何回到正常库:
在shell:
在tortoiseHgWorkbenchuncheck all files marked "M"
check all files indicated in the grep results above (i.e., have real diffs)
commit
cd src
hg diff --git > ../junk
grep "\-\-git" ../junk
in shell:
hg revert --all
然后清理工作目录(还原 - 所有生成的一些不存在的文件。还重置一些文件日期(我是唯一使用这个存储库的人,文件日期对我很有用。是的,有一个Hg扩展名来恢复文件日期,但我还没有安装它)。
这个过程让我再一次列队。
在BC3,在会话 - >会话设置下,在比较选项卡上将其设置为“二进制比较”或“基于规则”。你比较哪种类型的文件? – Edward
比较设置为“基于规则”。该文件是一个C++源文件。 “二元相同”的BC3结果确实是正确的。我现在要看@barjak建议的“权限”可能性。 (第一次检查看起来像权限没有改变,但我会进一步挖掘...) –
对于我来说,如果我必须使用微软的Windows,我会发生这种情况。如果我使用它来提交,那么如果我更新到这个修订版本,那么文件会显示我们已更改。 (也许MS Windows正在将某些东西保存到回购站,这不是/或不能由Unix来表示)。 –