mercurial - hg 显示已修改但未更改的文件,为什么会这样?

标签 mercurial tortoisehg

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

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

最近想在Linux机器上做一个commit,很多没想到会出现的文件都被列为“已修改”。我做了一个视觉差异(使用 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。

[编辑]

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

在 shell 中:

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

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

在 shell 中:
hg revert --all

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

这个过程让我重新排队。

最佳答案

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

关于mercurial - hg 显示已修改但未更改的文件,为什么会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19168096/

相关文章:

mercurial - Mercurial 6 与其他 VCS 的互操作性

version-control - Mercurial 中的部分(每个文件/文件夹)分支/标记?

mercurial - Sourcetree 不断要求与 Mercurial (Kiln) 进行身份验证?

mercurial - 减少Mercurial中的存储库大小

mercurial - 在错误的文件拆分后断开 Mercurial 中的文件连接

mercurial - merge 后如何删除Mercurial分支

Mercurial 不断返回错误 400 : Bad Request

python - 无法在 ubuntu 终端上运行 hg

Mercurial 关键字扩展以扩展每次提交

macos - Mercurial OS X 扩展启用