显示 subrepos 的修订版是否更改,或者它们是否脏了

Show if the revision of subrepos changed, or if they are dirty

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

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

我该怎么做?

大多数 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

为了比较父仓库所需的每个仓库的状态,我会求助于一些简单的 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 来检查状态是否被修改。