Mercurial - 在当前分支中修改的文件
Mercurial - files modified in current branch
你能帮我为 mercurial 创建一个合适的 revset hg status
吗?
我想列出当前分支自创建以来更改的所有文件。
我试过了
hg status --rev "branch(foo)"
其中 foo
是我的分支的名称,但这也列出了在创建我的分支的分支中更改的文件 (?)。
我不知道如何为此创建合适的 revset。
我创建了我的分支并在多个文件中做了一些更改。现在我想在我的应用程序中重新加载这些文件,但只有它们。
这看起来很简单(请参阅 hg help revsets
和 hg help revisions
以了解其来源)。
我们可以从分支中所有提交的集合开始,例如分支 foo
:
-r 'branch(foo)'
显然这可以产生十几个甚至一百万个修订;但是你想看看 "branch creation" 之间发生了什么——它需要首先检查 的父 这样的修订——和 "current status of branch" 之间发生了什么,它需要检查 最后这样的修改。
大集合的第一个1 次修订由 first()
获得,最后一个由 last()
获得。但是,当为各种命令提供修订说明符时,它们将其视为单个修订,这里分支名称足以命名分支上的最后一次提交。
要获取修订的(第一个)父级,我们使用 p1()
函数(后缀 ^
只允许在文字修订中使用,而不是 returns修订)。因此分支 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
与 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
函数选择集合中的第一个,可能和numerically-first改版不一样。例如,假设该集合由 x | y
组成,并且 y
中的修订在数值上低于 x
中的修订,或者您使用 reverse(branch(foo))
将提交放入 high-to-low命令。在这种情况下,min
而不是 first
将是要使用的函数。
你能帮我为 mercurial 创建一个合适的 revset hg status
吗?
我想列出当前分支自创建以来更改的所有文件。
我试过了
hg status --rev "branch(foo)"
其中 foo
是我的分支的名称,但这也列出了在创建我的分支的分支中更改的文件 (?)。
我不知道如何为此创建合适的 revset。
我创建了我的分支并在多个文件中做了一些更改。现在我想在我的应用程序中重新加载这些文件,但只有它们。
这看起来很简单(请参阅 hg help revsets
和 hg help revisions
以了解其来源)。
我们可以从分支中所有提交的集合开始,例如分支 foo
:
-r 'branch(foo)'
显然这可以产生十几个甚至一百万个修订;但是你想看看 "branch creation" 之间发生了什么——它需要首先检查 的父 这样的修订——和 "current status of branch" 之间发生了什么,它需要检查 最后这样的修改。
大集合的第一个1 次修订由 first()
获得,最后一个由 last()
获得。但是,当为各种命令提供修订说明符时,它们将其视为单个修订,这里分支名称足以命名分支上的最后一次提交。
要获取修订的(第一个)父级,我们使用 p1()
函数(后缀 ^
只允许在文字修订中使用,而不是 returns修订)。因此分支 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
与 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
函数选择集合中的第一个,可能和numerically-first改版不一样。例如,假设该集合由 x | y
组成,并且 y
中的修订在数值上低于 x
中的修订,或者您使用 reverse(branch(foo))
将提交放入 high-to-low命令。在这种情况下,min
而不是 first
将是要使用的函数。