【问题标题】:Show if the revision of subrepos changed, or if they are dirty显示 subrepos 的修订是否更改,或者它们是否脏
【发布时间】:2017-05-07 18:42:09
【问题描述】:

我有一个带有多个子存储库的 mercurial 存储库(主存储库)。

我需要一个 mercurial 命令来显示工作副本中子 repo 的修订版是否更改(包括有关旧修订版和新修订版的信息)或子 repo 状态是否脏。

我该怎么做?

【问题讨论】:

  • 您所说的“子仓库的修订已更改”是什么意思?如果添加了新的修订版就足够了,或者只有在工作的活动修订版发生变化时(这对父仓库来说很重要,因为它只记录了它所依赖的子仓库 rev)
  • 我尝试描述用例:我更新到某个主 repo 修订版,因此导致每个子 repo 都有一个特定修订版。之后,我可以将一些子仓库更新为不同的修订版(而不是在主仓库修订版中固定的子仓库修订版)。最后,我想生成一份列出这些更改的报告。这对你有帮助吗?

标签: mercurial mercurial-subrepos


【解决方案1】:

大多数 mercurial 命令接受 -S--subrepos 标志。因此,通过调用hg st -S,您将获得所有已更改文件的列表,其中包括子存储库中的文件,如果它们的状态与 .hgsubstate 文件中记录的状态不同:

$ cd opengfx/
$ hg st
$ hg id
10065545725a tip
$ cd ..
$ hg st -S
M opengfx/.hgtags
M opengfx/Makefile
A opengfx/lang/japanese.lng
$ cat .hgsubstate 
785bc42adf236f077333c55c58490cce16367e92 opengfx

至于您希望获得实际修订版,这是 AFAIK 无法通过一个命令完成的。但是,您始终可以像上面一样检查各个子存储库的状态,也可以通过为 mercurial 提供另一条操作路径来从主存储库中检查它们:

$ hg id -R opengfx
10065545725a tip

为了将每个 repo 的状态与父 repo 所需的状态进行比较,我会求助于一些简单的 bash:

for i in $(cat .hgsubstate | cut -d\  -f2); do echo $i is at $(hg id -R $i) but parent requires $(cat .hgsubstate | grep $i | cut -d\  -f1); done

输出类似

opengfx is at 10065545725a tip but parent requires 785bc42adf236f077333c55c58490cce16367e92

以类似的方式,您还可以使用hg st而不是hg id来检查状态是否被修改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-18
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2012-04-04
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多