1

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

让我们假设以下变更集:

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

hs7783909dnns9097 - 第一个功能 - 上午 11:00

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

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

diff -r 00:p83jdps99shjhwop8

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

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

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

4

2 回答 2

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

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

于 2013-06-12T18:26:37.900 回答
2

看来这实际上已记录在案,但是您需要进行一些挖掘...

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!错误。

于 2013-06-12T15:07:20.880 回答