2013-10-03 43 views
8

我的问题是这样的:当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:

在tortoiseHgWorkbench

uncheck 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扩展名来恢复文件日期,但我还没有安装它)。

这个过程让我再一次列队。

+0

在BC3,在会话 - >会话设置下,在比较选项卡上将其设置为“二进制比较”或“基于规则”。你比较哪种类型的文件? – Edward

+0

比较设置为“基于规则”。该文件是一个C++源文件。 “二元相同”的BC3结果确实是正确的。我现在要看@barjak建议的“权限”可能性。 (第一次检查看起来像权限没有改变,但我会进一步挖掘...) –

+0

对于我来说,如果我必须使用微软的Windows,我会发生这种情况。如果我使用它来提交,那么如果我更新到这个修订版本,那么文件会显示我们已更改。 (也许MS Windows正在将某些东西保存到回购站,这不是/或不能由Unix来表示)。 –

回答

10

也可以在Unix权限更改时将文件标记为已修改。 尝试使用hg diff -g检查权限。

+2

我还不知道这个问题的根源(如果有人有任何额外的想法,我仍然感兴趣),但这个答案指出我在一个有用的方向。 –

+0

有相同的问题,并使用-g选项向我显示该文件更改的权限。 – Alex

2

只是做恢复没有帮助我。尽管我已经提交了这些文件,但这些文件仍然处于修改状态。如果我试图再犯。所以我刚刚删除了显示为已修改的文件(如果需要,请进行备份),从而导致所有文件显示为!在它旁边,当我跑

hg st 

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

hg revert --all --no-backup 

,并且解决了这一问题

相关问题