当我克隆出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/,因为我正在寻找一些工作。
答案 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 - 我找不到任何可用的东西。