我有一个带有 subrepos 的 mercurial repo(也是 mercurial)。想象一下我更改了子存储库和主存储库的情况。现在我想查看几个提交之间的更改,包括子存储库中的更改。
可能吗?
我使用 TortoiseHG 和 diffmerge。在从 TortoiseHg 调用视觉差异的 diffmerege 中,我看不到几个提交之间子存储库中的变化。
我有一个带有 subrepos 的 mercurial repo(也是 mercurial)。想象一下我更改了子存储库和主存储库的情况。现在我想查看几个提交之间的更改,包括子存储库中的更改。
可能吗?
我使用 TortoiseHG 和 diffmerge。在从 TortoiseHg 调用视觉差异的 diffmerege 中,我看不到几个提交之间子存储库中的变化。
在命令行中,您可以执行以下操作。假设您想查看example
在变更集(在主仓库中)c608f6017bd7
和72d284a44170
.
在主仓库中
hg diff -rc608f6017bd7:72d284a44170 .hgsubstate | grep example
将返回 subrepo 的变更集example
,例如:
-001fc0acef220bcd42898ef3932dee8330ea64c0 example
+77f9db4d51c4b483607178aba91c872b0adedf1e example
现在你可以看到日志和 subrepo 的差异变化:
cd example
hg log -r001fc0acef220bcd42898ef3932dee8330ea64c0:77f9db4d51c4b483607178aba91c872b0adedf1e
hg diff -r001fc0acef220bcd42898ef3932dee8330ea64c0:77f9db4d51c4b483607178aba91c872b0adedf1e
如果您经常需要它,您可以创建一个 bash 脚本,命名sublog
如下:
#!/bin/bash
r=$(hg diff -r$1:$2 .hgsubstate | grep $3 | cut -c 2-41 | tr '\n' ':' | sed 's/:$//'; echo '')
cd $3
hg log -r:$r
并像这样使用它:
sublog c608f6017bd7 72d284a44170 example
我只能告诉你如何在命令行上实现它——但这也很容易通过 tortoiseHG 获得:
大多数命令可以通过使用-S
or--subrepos
标志来识别子存储库。因此,为了查看两个变更集 X 和 Y 之间的差异,包括所有子存储库上的差异,请在主存储库中执行:
hg diff -S -rX:Y
当然,请注意,如果提交给主版本的子存储库版本没有更改,它不会在子存储库中显示差异。
对于我使用过的 TortoiseHg 版本(不包括最近的几个版本),我还没有看到一种方法来做你所问的事情。不过有几个选项:
hg diff -S -rX:Y
那里做。hg archive --repository <path-to-repo> -r <rev> -S -t files -- <outputfolderpath>
或在 TortoiseHg 中,右键单击变更集,选择Export -> Archive)。然后在存档目录上使用 diffmerge。这有点乏味(特别是如果你想区分许多变更集),但你会得到一个“深度”的视觉差异。