Mercurial显示文件修改不正确

时间:2010-02-08 11:42:38

标签: mercurial dvcs

当我克隆出Mercurial存储库时,它通常会将文件显示为尚未修改的文件。当我执行以下步骤时,可能会发生这种情况;

$ hg clone <url>
$ cd project
$ hg st
.... large number of files with M at the start for modified
$ hg diff
.... no result.

我认为这是因为文件在过程中已经更改了权限,所以看起来文件是不同的,因为当使用hg st时,hg实际上并不对每个文件执行diff。我知道这也可能发生在git中。

如果我执行hg提交,那么问题就会消失,但这意味着我必须做一个空提交,这不是特别好。

我尝试过各种各样的事情,比如hg st --all来获取更多信息,它只显示某些文件被修改 - 不是全部。我看不到一种模式。

当我正在进行我的hg克隆时,它发生在我使用的网络驱动器上,因为它已备份 - 我不确定这是否会导致文件权限发生变化?我目前正在运行Ubunut 9.04。

有没有办法可以让hg st以某种方式纠正自己?

有问题的项目(尽管与其他人一起发生)是http://bitbucket.org/d0ugal/django-bursar/overview/,因为我正在寻找一些工作。

2 个答案:

答案 0 :(得分:5)

如果是已更改的权限,您可以使用hg diff --git查看这些差异。我不确定为什么权限会在结账时发生变化。

答案 1 :(得分:0)

事实证明:

$ hg diff --git

...显示文件权限确实已从644更改为755。

我不是特别喜欢这个解决方案,但我能够通过运行它来解决它(在托管代码的服务器上,而不是我的本地机器)。

find . -type f -print | xargs chmod 644

然后两个文件显示它们已从755更改为644(因此我单独更新了这些文件)。幸运的是,在这种情况下这很容易,但是具有更多不同文件权限的项目可能是个问题。

我认为问题可能在于我的服务器如何共享驱动器 - 我需要在另一点上调查它,但这适合于临时。它必须与文件如何保存到远程机器有关?我想下次我会尝试在服务器上进行git克隆,并在本地进行项目工作。

作为旁注,git的FAQ中有关于此行为的观点。 http://git.wiki.kernel.org/index.php/GitFaq#Why_does_git_diff_sometimes_list_a_file_that_has_no_changes.3F - 我找不到任何可用的东西。