首页 > 解决方案 > hg 状态返回空白但文件已更改

问题描述

我有一个文件,我用 xcopy 在我的 hg 存储库中的文件顶部复制了一个文件。我已经用不同的文件完成了 1000 次,没有任何问题。当我复制此特定文件并尝试提交时,我收到“没有更改”消息。

该文件肯定已更改。如果我在记事本中打开它,不做任何更改然后重新保存它,mercurial 会识别这些更改。如果我在 Notepad++ 中打开它,编辑它,撤消编辑然后保存它,mercurial 会识别更改。

如果我重新启动该过程(将文件复制到新的 hg 存储库并提交),它每次都会在同一点失败。这些文件有一些东西,但是什么?我认为它可能是修改日期,因为它们是完全相同的毫秒,但是在编辑我复制的文件以在修改日期上添加 1 分钟后,它仍然不起作用。

什么会导致这种情况?我应该寻找什么?

hg status

hg status -A
C file.txt

hg commit file.txt
nothing changed

在 Windows 上,使用未启用扩展的 Mercurial 2.2.2(已知 inotify 扩展会导致类似问题)

标签: mercurial

解决方案


似乎 Mercurial(至少 2.2.2)只在文件被编辑/替换时检查文件。它通过检查修改日期来做到这一点。由于我的文件具有完全相同的时间戳,因此它没有检查内容。

当我编辑时间戳使其不同时,它只会更改元数据而不是文件本身。因此 Mercurial 没有收到更改通知,因此它从未查看并发现时间戳不同。

解决方案:在复制文件之前更改新文件的时间戳(或将其复制到其他地方,编辑它,然后复制到存储库)允许 Mercurial 看到时间戳已更改,然后它将检查内容是否已更改。


推荐阅读