Mercurial显示文件修改不正确

Ora*_*Box 7 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.
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/,因为我正在寻找一些工作.

jam*_*san 5

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


小智 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 的任何内容。

  • 难道不应该是“hg diff --git”而不是“hg st --git”吗? (3认同)
  • 如果路径中有空格,请使用此“find”。-type f -print | xargs --delimiter=\\n chmod 644` (3认同)