Mercurial diff包括第一个变更集

时间:2013-06-11 13:51:45

标签: mercurial diff changeset

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

让我们假设以下变更集:

  

p83jdps99shjhwop8 - 第二个特征12:00 PM

     

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

     

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

如果我需要"差异"已经提交的所有更改中,我能够实现此目的的唯一方法是使用以下diff命令...

diff -r 00:p83jdps99shjhwop8

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

这似乎正是我们基于一些测试所需要的,但是我在跟踪这种情况下的文档时遇到了问题(也许我只是无法设计正确的Google查询)。因此,我不确定这是否会普遍适用,或者它是否恰好与我的设置或我偶然测试的回购相关。

是否有建议的方法来实现我想要实现的目标?如果没有,我上面描述的是什么?

2 个答案:

答案 0 :(得分: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!错误。

答案 1 :(得分: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