我有一个包含多个子存储库的mercurial存储库(主存储库)。
我需要一个mercurial命令来显示工作副本中子仓库的修订版本是否发生了变化(包括旧版和新修订版的信息),或者子仓库状态是否为脏。
我该怎么做?
答案 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
来检查状态是否已被修改。