【问题标题】:Mercurial showing files as modified incorrectlyMercurial 显示文件修改不正确
【发布时间】:2010-02-08 11:42:37
【问题描述】:

当我克隆出 Mercurial 存储库时,它通常会显示文件正在被修改,而实际上它们没有被修改。当我执行以下步骤时,可能会发生这种情况;

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

我认为这是因为文件在此过程中已更改其权限,因此文件似乎有所不同,因为 hg 在使用 hg st 时实际上并未对每个文件进行差异。我知道这也可能发生在 git 中。

如果我进行 hg 提交,那么问题确实会消失,但这意味着我必须进行空提交,这并不是特别好。

我已经尝试做各种事情,比如 hg st --all 来获取更多信息,它只显示一些文件被修改 - 不是全部。我看不到图案。

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

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

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

【问题讨论】:

  • 我也有这个问题,很烦人,让我觉得 Mercurial 不可靠。

标签: mercurial dvcs


【解决方案1】:

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

【讨论】:

  • 谢谢 - 我刚刚发现这要感谢 IRC 上的一些帮助。我自己发布了一个关于我最终如何解决问题的答案 - 不理想,但我现在可以回去工作了!
【解决方案2】:

事实证明:

$ hg diff --git

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

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

find . -type f -print | xargs chmod 644

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

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

作为旁注,在 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
  • 如果路径中有空格,请使用find . -type f -print | xargs --delimiter=\\n chmod 644
  • 或者 find . -type f -print0 | xargs -0 chmod 755 如果 --delimiter 不可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2011-05-07
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多