当"hg diff -g"没有时,为什么"hg status"会显示更改的文件?(一位家长)

Ame*_*ina 36 mercurial

我有一个存储库,其中:

> hg st
Run Code Online (Sandbox Code Playgroud)

显示我的工作目录有一些未提交的更改,而

> hg diff


> hg diff -g


> hg diff --git
Run Code Online (Sandbox Code Playgroud)

什么都不显示

我在这里读到:4.10.hg status显示已更改的文件,但hg diff不显示!下列:

当文件内容或标志相对于任一父项更改时,hg状态报告.hg diff仅报告相对于第一个父项的更改内容.您可以使用--git选项查看标记信息,以使用-r将hg diff和deltas相对于另一个父项进行查看.

但是,如果我运行hg parents它只显示一个父(提示).正如我上面提到的,我也尝试了hg diff --git 它仍然没有显示任何内容.

注意:

  • 以上是Mercurial版本2.0.1
  • hg status仅显示M在常规文件旁边.
  • hg diffhg diff -g打印什么
  • 文件系统是NFS.
  • hg parents 只打印一个父级

Pav*_*lov 20

Mercurial在日常使用中的一些摘录(Mercurial:权威指南)(在这里复制,因为似乎无法给出页面末尾的方便链接):

hg diff命令的默认输出向后兼容常规diff命令,但这有一些缺点.

上面的hg diff的输出掩盖了我们简单地重命名文件的事实.hg diff命令接受一个选项,--git或者-g使用更新的diff格式,以更易读的形式显示这些信息.

此选项还有助于处理可能会造成混淆的情况:一个看起来根据情况修改hg status但未hg diff打印任何内容的文件.如果我们更改文件的执行权限,则会出现这种情况.

普通的diff命令不关注文件权限,这就是为什么hg diff默认情况下不打印任何内容.如果我们提供-g选项,它会告诉我们到底发生了什么.

总而言之,hg diff命令错过了有关更改的几种信息:属性,权限,文件名等.即使您有单个父项,这些更改也可能存在.并hg status正确考虑所有变化.要查看发生了什么,请使用hg diff -g.这是"发生了什么"这个问题的答案.

似乎向后兼容是'为什么'.我不确定,但我认为'普通差异'是一些普遍的或内置的Unix/Linux工具(从hg和git都来自这个世界的事实来判断).

  • 我只是再次遇到此错误。`hg diff`和`hg diff -g`不输出任何内容。`hg st`显示修改后的文件(它旁边的`M`)。 (2认同)
  • 这没有回答这个问题 - 问题是(在Linux上)`hg diff -g`没有显示`hg status`显示修改过的文件以及(传统的unix)文件权限没有区别的地方.一个父母,新近更新的目录. (2认同)

Rob*_*b I 6

在这些情况下(我的团队经常发生),我发现此命令将解决所有问题:

hg debugrebuilddirstate
Run Code Online (Sandbox Code Playgroud)

要么

hg debugrebuilddirstate -r tip
Run Code Online (Sandbox Code Playgroud)

它在帮助文档中很少介绍,但基本上我相信它会清除“ dirstate”文件,该文件缓存有关工作目录文件的信息。下次您hg stat将从头开始刷新它。

一个警告:如果您添加删除了文件,则在dirstate重建文件时该信息将丢失。


Iva*_*rus 5

如果您有ignorewsignoreblanklines设置,.hgrchg status它将显示为已更改,但hg diff不会显示(假设更改当然只是空白)。