0

我有一个带有 subrepos 的 mercurial repo(也是 mercurial)。想象一下我更改了子存储库和主存储库的情况。现在我想查看几个提交之间的更改,包括子存储库中的更改。

可能吗?

我使用 TortoiseHG 和 diffmerge。在从 TortoiseHg 调用视觉差异的 diffmerege 中,我看不到几个提交之间子存储库中的变化。

4

3 回答 3

1

在命令行中,您可以执行以下操作。假设您想查看example在变更集(在主仓库中)c608f6017bd772d284a44170.

在主仓库中

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
于 2018-04-12T10:07:08.187 回答
0

我只能告诉你如何在命令行上实现它——但这也很容易通过 tortoiseHG 获得:

大多数命令可以通过使用-Sor--subrepos标志来识别子存储库。因此,为了查看两个变更集 X 和 Y 之间的差异,包括所有子存储库上的差异,请在主存储库中执行:

hg diff -S -rX:Y

当然,请注意,如果提交给主版本的子存储库版本没有更改,它不会在子存储库中显示差异。

于 2015-07-30T10:28:18.407 回答
0

对于我使用过的 TortoiseHg 版本(不包括最近的几个版本),我还没有看到一种方法来做你所问的事情。不过有几个选项:

  • 你可以直接在 TortoiseHg 的输出日志窗口中输入命令,所以你可以在hg diff -S -rX:Y那里做。
  • 归档您想要区分到某些目录的父 repo 的版本(hg archive --repository <path-to-repo> -r <rev> -S -t files -- <outputfolderpath>或在 TortoiseHg 中,右键单击变更集,选择Export -> Archive)。然后在存档目录上使用 diffmerge。这有点乏味(特别是如果你想区分许多变更集),但你会得到一个“深度”的视觉差异。
于 2015-08-01T18:44:15.983 回答