你能帮我为mercurialhg status
创建一个合适的转速集吗?我想列出当前分支自创建以来更改的所有文件。我试过
hg status --rev "branch(foo)"
其中foo
是我的分支的名称,但它也列出了在创建分支的分支中更改的文件(?)。我不知道如何创建一个合适的转速设置。
我创建了我的分支,并在多个文件中进行了一些更改。现在我想在我的应用程序中重新加载这些文件,但只能重新加载它们。
这看起来很简单(请参阅hg help revsets
和hg help revisions
了解其来源)。
我们可以从分支中所有提交的集合开始,例如,对于分支foo
:
-r 'branch(foo)'
显然,这可以产生十几次,甚至一百万次的修订;但是您想看看"分支创建"(需要检查第一个此类修订的父级)和"分支的当前状态"(需要查看最后一个此类修订)之间发生了什么。
大集合的第一次1修订由first()
获得,最后一次由last()
获得。然而,当为各种命令提供了修订说明符时,它们会将其作为单个修订进行查找,而在这里,分支名称足以命名分支上的最后一次提交。
为了获得修订的(第一个)父级,我们使用p1()
函数(后缀^
只允许用于文字修订,而不允许用于返回修订的函数)。因此,分支foo
上第一次修订的父级是:
-r 'p1(first(branch(foo)))'
要获得与分支中最后一次提交的完全差异:
hg diff -r 'p1(first(branch(foo)))' -r 'foo'
但是你不想要一个完整的diff,你想要的是文件名。产生这个的命令是hg status
,它有一个稍微不同的语法:
hg status --rev 'p1(first(branch(foo)))' --rev 'foo'
状态包括前面的字母以及名称:A
表示新添加的文件,M
表示修改的文件,依此类推。请注意使用--rev
而不仅仅是-r
(事实上,您也可以将--rev
与hg diff
一起使用)。
请注意,有一个更短的语法::foo
,它可以获取给定分支的所有祖先,直到并包括命名分支中的最后修订。然而,这会让有太多祖先。但是,您可以使用p1(first(branch(foo)))::foo
作为--rev
的(整个)参数,这也是有效的。所以:
hg status --rev 'p1(first(branch(foo)))::foo`
是一种稍短的表达方式。
最后,请注意,将分支中的第一次提交与最后一次提交进行比较(例如,hg status --rev 'first(branch(foo))' --rev foo
会发生这种情况)可能会错过分支上第一次提交中所做的更改。这就是我们在这里使用p1
的原因。
1first
函数选择集合中的第一个,它可能与数字上的第一个修订不同。例如,假设集合由x | y
组成,并且y
中的修订在数字上低于x
中的修订,或者使用reverse(branch(foo))
将提交按从高到低的顺序排列。在这种情况下,将使用min
而不是first
。