我最近遇到了需要生成Mercurial diff的所有更改,直到特定的变更集,其中包括repo的第一个变更集。我意识到这种扩展的差异定义,但这是用于将新项目上传到代码审查工具。
让我们假设以下变更集:
p83jdps99shjhwop8 - 第二个特征12:00 PM
hs7783909dnns9097 - 第一个功能 - 上午11:00
a299sdnnas78s9923 - 原创应用设置 - 上午10:00
如果我需要"差异"已经提交的所有更改中,我能够实现此目的的唯一方法是使用以下diff命令...
diff -r 00:p83jdps99shjhwop8
在这种情况下,参数param中的第一个变更集(此处为00
)采用正则表达式0[0]+
这似乎正是我们基于一些测试所需要的,但是我在跟踪这种情况下的文档时遇到了问题(也许我只是无法设计正确的Google查询)。因此,我不确定这是否会普遍适用,或者它是否恰好与我的设置或我偶然测试的回购相关。
是否有建议的方法来实现我想要实现的目标?如果没有,我上面描述的是什么?
答案 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
在上面的示例中,null
到7
的范围不包括修订版3
和6
。