显示子版本的修订版本是否更改,或者它们是否变脏

时间:2016-12-22 07:42:52

标签: mercurial mercurial-subrepos

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

我需要一个mercurial命令来显示工作副本中子仓库的修订版本是否发生了变化(包括旧版和新修订版的信息),或者子仓库状态是否为脏。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

大多数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来检查状态是否已被修改。

相关问题