Mercurial 显示子回购的修订版本是否已更改,或者它们是否脏
我有一个mercurial存储库(主repo)和几个子存储库 我需要一个mercurial命令来显示子回购的修订是否在工作副本中发生了更改(包括关于旧版本和新版本的信息),或者子回购状态是否为脏Mercurial 显示子回购的修订版本是否已更改,或者它们是否脏,mercurial,mercurial-subrepos,Mercurial,Mercurial Subrepos,我有一个mercurial存储库(主repo)和几个子存储库 我需要一个mercurial命令来显示子回购的修订是否在工作副本中发生了更改(包括关于旧版本和新版本的信息),或者子回购状态是否为脏 如何执行此操作?大多数mercurial命令都接受-S或--subrepos标志。因此,通过调用hg st-S可以获得所有已更改文件的列表,其中包括子回购中的文件,如果这些文件的状态与.hgsubstate文件中记录的状态不同: $ cd opengfx/ $ hg st $ hg id 1006554
如何执行此操作?大多数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
至于您希望获得实际修订版,一个命令恐怕不可能实现。但是,您可以随时检查上述单个次级回购的状态,也可以通过为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
检查状态是否被修改,您所说的“子回购的修订已更改”是什么意思?如果添加了新的修订,或者只有当有效修订发生变化时(这对于母回购协议来说很重要,因为它只记录了子回购协议的修订版本,这取决于该版本),我尝试描述用例:我更新到某个主回购协议修订版本,从而导致每个子回购协议都有某个修订版本。之后,我可以将一些次级回购更新为不同的修订版(与主回购修订版中固定的次级回购修订版不同)。最后,我想生成一个报告,其中列出了这些更改。这对你有帮助吗?