【问题标题】:hg shows files modified that are unchanged, why might that be?hg 显示已修改但未更改的文件,为什么会这样?
【发布时间】:2013-10-10 16:14:57
【问题描述】:

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

情况如下:我有一个 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 显示一些未更改的文件)。顺便说一句,我使用的是 Hg 2.6。

[编辑]

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

在外壳中:

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

在 tortoiseHgWorkbench 中

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

在外壳中:

hg revert --all

然后清理工作目录(revert --all 生成了一些失效的文件。还重置了一些文件日期(我是唯一使用这个存储库的人,文件日期对我很有用。是的,有一个 Hg 扩展来恢复文件日期,但我还没有安装它)。

这个过程让我重新排起了队。

【问题讨论】:

  • 在 BC3 中,在 Session->Session Settings 下,Comparison 选项卡上是否设置为“Binary Comparison”或“Rules Based”。你比较的是什么类型的文件?
  • 比较设置为“基于规则”。该文件是 C++ 源文件。 “二进制相同”的BC3结果确实是正确的。我现在要看看@barjak 建议的“权限”可能性。 (第一次检查看起来权限没有改变,但我会进一步挖掘......)
  • 对我来说,如果我必须使用 Microsoft 的 Windows,就会发生这种情况。如果我用它来提交,那么如果我更新到这个版本,那么文件就会显示给我们改变了。 (也许 MS windows 正在将某些东西保存到 repo,这不是/或不能由 Unix 表示)。

标签: mercurial tortoisehg


【解决方案1】:

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

【讨论】:

  • 我仍然不知道这个问题的根本原因(如果有人有任何其他想法,我仍然感兴趣),但这个答案为我指明了一个有用的方向。
  • 遇到了同样的问题,使用 -g 选项显示文件的权限发生了变化。
【解决方案2】:

只是进行还原对我没有帮助。即使我已提交文件,这些文件仍将保持在已修改状态。如果我再次尝试提交。所以我只是删除了显示为已修改的文件(如果需要,请进行备份),这导致所有文件都显示为 !我跑的时候在它旁边

hg st

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

hg revert --all --no-backup

这解决了问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-08
    • 2014-04-25
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多