【问题标题】:How to understand why hg import --exact fails如何理解为什么 hg import --exact 失败
【发布时间】:2019-04-12 16:23:18
【问题描述】:

我已经从一个存储库的单个提交(变更集)创建了一个补丁文件(使用 TortoiseHg),并正在尝试将它应用到另一个存储库。

当我简单地hg import 1059.patch 时,我得到了

正在应用 1059.patch
应用于工作目录

(我不确定这意味着什么。我问过a separate question。)

但由于我想确保保留哈希值,所以我使用了hg import 1059.patch --exact,在这种情况下我得到了

应用 1059.patch
abort:补丁损坏或丢失信息

我该如何调试呢?我能获得更多关于究竟出了什么问题的信息吗?

【问题讨论】:

  • 你是如何生成补丁的?是否有任何错误或其他有用的输出?
  • @DaveInCaz,我使用了 THg,没有错误。刚刚“创建”,文件出现在我要求保存的位置。

标签: mercurial


【解决方案1】:

问题可能是您在一个补丁文件中有多个补丁。

根据this forum post

Import 对每个输入文件进行一次提交,您不能完全保留 [多个] 一次提交中的提交 ID。

(由 Matt Mackall 发布,我相信他是 HG 的创建者/维护者之一)。

(仅供参考,我搜索了错误消息“中止:补丁已损坏或丢失信息”,这并不常见并导致该帖子。)

【讨论】:

  • 我从单个变更集 1059 创建了一个补丁。相应地更新了问题。
【解决方案2】:

我可以重现这个。在我的例子中,import --exact 失败了,因为它是一个移植,并且“额外的”元数据(hg log --debug 可见)导致了不同的变更集哈希。特别是对于移植,元数据通过hg log --debug 与以下额外行查看:

extra:       source=acdaed39eb57d8bc2efe6a6bf3547bb6d06fe2d5

此数据是 mercurial 用于计算变更集哈希的输入之一。但是export 没有提供该信息(至少从 mercurial 5.2.1 开始)。

还有其他操作会产生“额外”元数据(例如,rebase)。

对我来说,这似乎是一个真正的错误 - export 不提供“额外”数据。当然,如果export 学会提供这些数据,则需要教import 如何使用额外的数据。

重现步骤:

hg init foo
(
echo "create a few changesets (with a branch) in repo foo"
cd foo
echo 0 > x
hg ci -Am0
echo 1 > x
hg ci -m1
hg up 0
echo 0a > x
hg ci -m0a
)
echo "clone the 3 changesets in foo to foo2"
hg clone -U foo foo2
(
echo "add a couple more changesets to foo, the second of which is a graft"
cd foo
echo 2 > x
hg ci -m2
hg up -r1
hg graft --log 2
echo 0a > x
hg resolve -m x
hg graft --continue
hg export 3 > exp3
hg export 4 > exp4
echo "log of the two new changesets:"
hg log -G --debug -r3:4 | cat
)
(
echo "import --exact the two new changesets from foo to foo2 (or try to)"
cd foo2
hg log -G --debug | cat
echo "import the first new changeset - this will work fine"
hg import --exact ../foo/exp3
hg log -G --debug -r3 | cat

echo "this will fail - presumably because of the extra graft metadata in rev 4"
hg import --exact ../foo/exp4
)

这并没有回答 OP 关于如何调试它的第一个问题,但它是关于出了什么问题的猜想(第二个问题)。

更新:

确实,这已被发现并记录为错误:

https://bz.mercurial-scm.org/show_bug.cgi?id=4857

不幸的是,它没有修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 2022-08-13
    相关资源
    最近更新 更多