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