hg显示修改过的文件没有变化,为什么会这样?

adt*_*eff 11 mercurial tortoisehg

我的问题是:什么可能导致Mercurial(当通过"status"或TortoiseHgWorkbench)文件在未更改时指示为"已修改"?

情况就是这样:我有一台Linux机器的本地存储库.我只使用Linux机器上的存储库.但是,我确实在Windows机器上有一个存储库(和工作文件)的精确副本(我通过闪存驱动器同步,使用BeyondCompare).为了我最好的回忆,我从不在Windows机器上调用mercurial,尽管它安装在那里.

我最近想在Linux机器上进行提交,并且我不希望显示的许多文件被列为"已修改".我做了一个visual diff(使用BeyondCompare),它表明工作目录副本与存储库中的父项"二进制相同".TortoiseHgWorkbench显示文件"已修改",差异窗口显示整个文件,绿色,(好像存储库有一个空文件,我猜).在有问题的文件中,文件系统上的文件日期是几个月,而我上次提交(我提交所有已更改的文件)是几个星期前.一些未更改的文件显示为"已修改",但有些文件未显示.我之前从未见过这种行为,所以我有点困惑.

我在存储库上运行了"hg verify",并没有注意到任何有趣的内容.

我想这不是什么大问题,因为工作目录中的所有文件都是完整的,如果我要提交文件(即使它们没有改变),我也不确定会有什么损害.但我很想知道发生了什么.

提前感谢任何想法,寻找什么.

[编辑]

还没有找到根本原因(文件权限和访问日期不变)但是@ barjak的回复指向了我发现这个的方向:当"hg diff -g"没有时,为什么"hg status"显示更改的文件?(一个亲本).我的情况与那里描述的相同(hg diff和hg diff --git仅显示真正已更改的文件,而hg status显示一些未更改的文件).顺便说一下,我正在使用Hg 2.6.

[编辑]

如果它对任何人都有帮助,这就是我回到正常存储库的方式:

在一个shell中:

cd src
hg diff --git > ../junk
grep "\-\-git" ../junk
Run Code Online (Sandbox Code Playgroud)

在tortoiseHgWorkbench

uncheck all files marked "M"
check all files indicated in the grep results above (i.e., have real diffs)
commit
Run Code Online (Sandbox Code Playgroud)

在一个shell中:

hg revert --all
Run Code Online (Sandbox Code Playgroud)

然后清理工作目录(恢复 - 所有生成一些已解散的文件.还重置一些文件日期(我是唯一使用此存储库的人和文件日期对我有用.是的,有一个Hg扩展名来恢复文件日期但是我还没有安装它.

这个过程让我再次排队.

bar*_*jak 11

当Unix权限发生变化时,文件也可以标记为已修改.尝试hg diff -g检查权限.

  • 我仍然不知道这个问题的根本原因(如果有人有任何额外的想法,我仍然感兴趣),但这个答案指出了我有用的方向. (2认同)