当我克隆出一个Mercurial存储库时,它通常会将文件显示为未修改时进行修改.当我执行以下步骤时,可能会发生这种情况;
$ hg clone <url>
$ cd project
$ hg st
.... large number of files with M at the start for modified
$ hg diff
.... no result.
Run Code Online (Sandbox Code Playgroud)
我认为这是因为文件在进程中已经更改了权限,所以看起来文件是不同的,因为当使用hg st时,hg实际上并不对每个文件执行diff.我知道这也可能发生在git中.
如果我做一个hg提交然后问题确实消失但这意味着我必须做一个空提交,这不是特别好.
我尝试过各种各样的事情,比如hg st --all来获取更多信息,它只显示一些文件被修改 - 不是全部.我看不到一个模式.
当我正在做我的hg克隆它发生在我使用的网络驱动器上,因为它备份 - 我不确定这是否可能导致文件权限更改?我目前正在运行Ubunut 9.04.
有什么方法可以让hg st以某种方式纠正自己?
有问题的项目(虽然它与其他人一起发生)是http://bitbucket.org/d0ugal/django-bursar/overview/,因为我正在寻找一些工作.
小智 0
事实证明这样做:
$ hg diff --git
Run Code Online (Sandbox Code Playgroud)
...表明文件权限确实已从 644 更改为 755。
我不太喜欢这个解决方案,但我能够通过运行它来解决它(在托管代码的服务器上,而不是我的本地计算机上)。
find . -type f -print | xargs chmod 644
Run Code Online (Sandbox Code Playgroud)
然后两个文件显示它们已从 755 更改为 644(因此我单独更新了它们)。幸运的是,在这种情况下这非常容易,但具有更多不同文件权限的项目可能会出现问题。
我认为问题可能在于我的服务器如何共享驱动器 - 我需要在另一点研究这个问题,但这适合临时使用。这一定与文件如何保存到远程机器有关?我想下次我会尝试在服务器本身上进行 git 克隆并在本地进行项目工作。
附带说明一下,git 的常见问题解答中有关于此行为的一点。http://git.wiki.kernel.org/index.php/GitFaq#Why_does_git_diff_sometimes_list_a_file_that_has_no_changes.3F - 但我找不到 Mercurial 的任何内容。