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

时间:2013-10-03 19:54:55

标签: mercurial tortoisehg

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

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

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

我在存储库上运行了“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显示一些未更改的文件)。顺便说一下,我正在使用Hg 2.6。

[编辑]

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

在shell中:

cd src
hg diff --git > ../junk
grep "\-\-git" ../junk

in tortoiseHgWorkbench

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

在shell中:

hg revert --all

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

这个过程让我再次排队。

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:3)

做一个回复并没有帮助我。即使我已经提交了文件,文件也将保持在Modified状态。如果我再试一次。所以我刚刚删除了显示为已修改的文件(如果需要,可以进行备份),这会导致所有文件显示为!我跑的时候旁边

hg revert --all --no-backup

之后我运行以下命令来恢复文件(已经签入):

{{1}}

并修复了问题