mercurial - 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(至少 2.2.2)只在文件被编辑/替换时检查文件。它通过检查修改日期来做到这一点。由于我的文件具有完全相同的时间戳,因此它没有检查内容。
当我编辑时间戳使其不同时,它只会更改元数据而不是文件本身。因此 Mercurial 没有收到更改通知,因此它从未查看并发现时间戳不同。
解决方案:在复制文件之前更改新文件的时间戳(或将其复制到其他地方,编辑它,然后复制到存储库)允许 Mercurial 看到时间戳已更改,然后它将检查内容是否已更改。
推荐阅读
- java - 在 Eclipse 下运行时,BufferedReader 在 StdIn 上看不到文件结尾
- javascript - 没有用js刷新悬停
- c# - 如何适合打印的固定文档?
- cordova-plugins - 如何使用 ionic/typescript 中的“nfc.readerMode()”函数获取“ndefMessage”对象值
- python - 比较帕累托分布的分析矩和经验矩
- kubernetes - 为什么选择器在副本集 Kubernetes
- xml - 如何使用 XSLT 编写多个 when 条件?
- asp.net - 仅获取文件名的一部分并从asp.net vb中的服务器文件夹中删除
- swiftui - 如何使用关闭方法关闭工作表?
- html - 创建一个自动缩放的固定单元格大小的网格