gpt4 book ai didi

mercurial - merge 中显示的 TortoiseHg 文件

转载 作者:行者123 更新时间:2023-12-01 03:58:21 24 4
gpt4 key购买 nike

我正在编写代码来分析我们对 Hg 的 promise ,并将我的结果与 TortoiseHg 进行比较.我无法理解 TortoiseHg 的行为在 merge 的情况下。

当我在 TortoiseHg 中选择 merge 变更集时,受影响的文件列表只显示那些有冲突的文件,除非我按 "Show All"按钮。至少这似乎是我的意图,根据我从网络上收集到的信息,以及如果我按下“全部显示”按钮,列表中显示的文件有一个双头箭头的观察结果。

我试图通过将变更集中的每个文件与 parent 双方进行比较来模拟这一点,并且仅在我的分析中包含与 parent 双方不同的文件。但是,我遇到了 TortoiseHg 在 merge 描述中显示的文件,但仅与一个父文件不同。我在 TortoiseHg 中看到了同样 - 与 parent 1 或 2 的差异显示出变化,但另一个 parent 没有。

我也试过用 --git 比较选项,以确保它不是我遗漏的元数据更改,但这根本不会改变结果。

要获取有关我正在使用的变更集的信息:

hg log -v -r <rev> --removed --style xml

我拿起 merge 变更集的父项,对于 merge 中的每个文件,执行
hg diff -r <parent1> -r <rev> filename
hg diff -r <parent2> -r <rev< filename

我发现文件 TortoiseHg在我报告的 merge 摘要中显示已 merge ,没有冲突。

任何人都可以阐明这种差异吗?

更新:
我能够使用 TortoiseHg 本身的源代码重现这一点。

克隆自 https://hg01.codeplex.com/tortoisehg
在 tortoiseHg 中打开 repo 并选择 rev 12602 (58eb7c70)。这是与 12599 (6c716caa) 和 12601 (39c95a81) 的 parent 的 merge 。

TortoiseHg 显示文件 tortoisehg/hgqt/repowidget.py 作为 merge 中唯一的冲突文件,但
hg diff -r 12599 -r 12602 tortoisehg/hgqt/repowidget.py

什么都不返回,而
hg diff -r 12601 -r 12602 tortoisehg/hgqt/repowidget.py

显示两条线在变化。

最佳答案

我想我已经弄清楚了 tortoisehg 的逻辑是什么(尽管我还没有检查来源以确保)。

正如您已经猜到的,tortoise 用双箭头显示 merge 两侧的文件已更改。但是,它不会简单地查看 merge 与其每个父项的差异(例如 p1(58eb7c70)::58eb7c70p2(58eb7c70)::58eb7c70 )。相反,tortoise 会查找 merge 中引入的所有更改,并比较两个父代的最后一个共同祖先。

我们以乌龟 repo 为例。 58eb7c70的血统图是:

Jonathan:tortoisehg $ hg log --graph -r ::58eb7c70 -l 5 --template "{node|short}\n{desc|firstline}\n\n"
o 58eb7c70d501
|\ Merge with stable (noop)
| |
| o 39c95a813105
| | repowidget: show all errors on infobar
| |
| o da7ff15b4b96
| | repowidget: limit infobar error messages to 2 lines of up to 140 chars by default
| |
o | 6c716caa11fd
|\| Merge with stable
| |
| o 48c055ad634f
| | sync: show non-ascii command-line arguments correctly
| |

如您所见,merge 58eb7c70d501 merge 了两个开发分支,一侧有一个变更集 (p1, 6c716caa11fd),另一侧有两个变更集 (p2, 39c95a813105 及其父级 da7ff15b4b96)。这些分支的分歧点是 p1 和 p2 的最后一个共同祖先——48c055ad634f。

(最后一个共同祖先可以直接用 hg log -r "last(ancestor(p1(58eb7c70), p2(58eb7c70)))" 找到)

让我们看看在这两个分支上所做的更改。我们将 merge 的每个父级与共同祖先进行比较:
Jonathan:tortoisehg $ hg status --rev "48c055ad634f::6c716caa11fd"
M .hgtags
M tortoisehg/hgqt/commit.py
M tortoisehg/hgqt/compress.py
M tortoisehg/hgqt/hgemail.py
M tortoisehg/hgqt/postreview.py
M tortoisehg/hgqt/purge.py
M tortoisehg/hgqt/rename.py
M tortoisehg/hgqt/repowidget.py
M tortoisehg/hgqt/revset.py
M tortoisehg/hgqt/run.py
M tortoisehg/hgqt/settings.py
M tortoisehg/hgqt/status.py
M tortoisehg/hgqt/sync.py
M tortoisehg/hgqt/visdiff.py
M tortoisehg/util/cachethg.py
M tortoisehg/util/hglib.py

Jonathan:tortoisehg $ hg status --rev "48c055ad634f::39c95a813105"
M tortoisehg/hgqt/repowidget.py

这些是由 58eb7c70d501 实际 merge 的更改——自从它们分开以来,两个分支上的所有内容都发生了变化。如您所见,列表之间唯一的共同文件——两个分支上唯一被更改的文件——是 tortoisehg/hgqt/repowidget.py ,正如你所料。您将看到该文件在 da7ff15b4b96 中发生了更改,该变更集不是 merge 的父级,但仍包含在从两个分支 merge 的更改中。

关于mercurial - merge 中显示的 TortoiseHg 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com