【问题标题】:Mercurial diff including first changesetMercurial diff 包括第一个变更集
【发布时间】:2013-06-11 13:51:45
【问题描述】:

我最近遇到了需要生成所有更改的 Mercurial 差异,直到特定更改集,其中包括 repo 的第一个更改集。我意识到这种扩展差异的定义,但这是为了将新项目上传到代码审查工具。

让我们假设以下变更集:

p83jdps99shjhwop8 - 第二个功能下午 12:00

hs7783909dnns9097 - 第一个专题 - 上午 11:00

a299sdnnas78s9923 - 原始应用设置 - 上午 10:00

如果我需要所有已提交更改的“差异”,我似乎可以实现此目的的唯一方法是使用以下 diff 命令...

diff -r 00:p83jdps99shjhwop8

在这种情况下,参数 param(此处为 00)中的第一个变更集采用 0[0]+ 的正则表达式形式

根据一些测试,这似乎正是我们所需要的,但我在跟踪有关这种情况的文档时遇到了麻烦(也许我只是无法设计正确的 Google 查询)。因此,我不确定这是否会普遍适用,或者它是否恰好特定于我的设置或我偶然测试过的存储库。

是否有建议的方法来实现我想要实现的目标?如果没有,我上面描述的内容是否记录在任何地方?

【问题讨论】:

  • 我相信hg diff -r null:tip 是你所追求的? (当然,如果你想要的一切都是tip 的祖先)。

标签: mercurial diff changeset


【解决方案1】:

看起来这实际上是有记录的,但你需要做一些挖掘......

https://www.mercurial-scm.org/wiki/ChangeSetID
https://www.mercurial-scm.org/wiki/Nodeid

因此,您所指的特殊 nodeid 是“nullid”。

2 位数字可能不足以识别 nullid(因为如果其他哈希以 2 个零开头,它可能会模棱两可),因此最好指定 4 个 0 或更多。

例如:hg diff -r 00:<hash of initial add changeset> 导致了abort: 00changelog.i@00: ambiguous identifier! 错误。

【讨论】:

  • 最好只使用 nullid 的长格式。
【解决方案2】:

我对您需要什么感到有些困惑。空存储库和修订版tip 之间的差异只是tip 处每个文件的内容——换句话说,它是tip 处项目的状态。在 diff 格式中,它将完全由 + 行组成。

无论如何,如果您想要一种方法来引用存储库的初始状态,它的文档化符号是null(请参阅hg help revisions)。因此,要获得初始(空)状态和 tip 的存储库状态之间的差异,您只需说

hg diff -r null -r tip

但是hg diff 为您提供了修订图中两点之间的差异。所以这只会给你tip的祖先:如果有分支(命名或未命名)尚未合并到tip的祖先,你将看不到它们。

  3--6
 / 
0--1--2--5--7 (tip)
    \   / 
      4

在上面的示例中,从null7 的范围不包括修订版36

【讨论】:

  • 谢谢。我不知道这行得通。当您运行这种 diff 时,diff 输出所提到的 nullid @mrokitka 的缩写形式。不过两者都有效。
  • 嗯,您确实要求提供一种记录方式来引用空修订版。 hg help 非常规范。
猜你喜欢
  • 2011-02-04
  • 2020-12-16
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 2011-02-02
  • 2011-07-23
  • 1970-01-01
  • 2014-04-18
相关资源
最近更新 更多