【问题标题】:Mercurial hg Subrepository issue - "abort: unknown revision'Mercurial hg 子存储库问题 - “中止:未知修订版”
【发布时间】:2010-03-11 16:24:21
【问题描述】:

注意:我昨天在kiln.stackexchange.com 上问过这个问题,但没有得到答案,这阻碍了我的工作。所以我想我会在这里试一试。

我的主要 mercurial 存储库中有一堆子存储库。在初始设置期间,我在.hgsub 中犯了一个错误。也就是说,我将两个子存储库指向同一个目录。

我应该拥有的:

sites/1=sites/1
sites/2=sites/2
sites/3=sites/3

我实际拥有的:

sites/1=sites/1
sites/2=sites/2
sites/2=sites/3

愚蠢的复制/粘贴错误。我犯了不正确的.hgsub,没有意识到我的错误。几次修改后,在向.hgsub 添加了一些新的子存储库时,我注意到了错误并将其修复在.hgsub 中。我承诺并继续前进。自从我“修复”.hgsub 中的错误以来,我已经完成了一些我不想重做的合理工作。

现在我们来解决实际问题:我在子存储库sites/3 中进行了一些更改,当我尝试提交主存储库时,出现以下错误:

abort: unknown revision 'LongGUIDLookingString'

我找到了this discussion,这似乎解决了我遇到的同样问题,但我不太清楚 bos 是如何解决它的。为了解决这个问题,我需要做什么?

.hgsubstate的相关部分:

7d1e430ac5f12e00cb5bebcdf693e72db2c45732 sites/1
6eea936a5b7cfff6169f59d0dc1c8c4eb5f8412d sites/2
e2b83b301997de8add1b659d82a7ab8201bda653 sites/3

【问题讨论】:

  • 字符串末尾有+吗?
  • 无加号。这是实际的字符串:'e2b83b301997de8add1b659d82a7ab8201bda653'。
  • @tonfa:如果它的末尾有 + 怎么办? (它对我有用,但我不知道从这里去哪里)。
  • @romkyns 最后的 + 表示子仓库是脏的(也就是修改过的),我认为这样的哈希不应该以 .hgsubstate 结尾

标签: mercurial subrepos


【解决方案1】:

我猜 .hgsubstate 文件现在在 repo2 条目中包含来自 repo3 的 hashid(这是您的 LongGUIDLookingString 的内容)。

尝试编辑 .hgsubstate 以指向每个 repo 的正确/当前 hashid。

如果这不起作用,请粘贴您的 .hgsubstate 文件,以便我们查看如何调整它。

【讨论】:

  • 您是在谈论变更集 hashid 吗?子存储库的变更集哈希 ID 看起来不像 .hgsubstate 中的哈希。或者是否存在与sites/3 子存储库相关联的另一个哈希(.hgsubstate 内部除外)?我已将.hgsubstate 的相关部分添加到原始问题中。
  • 好的,我现在看到 mercurial 通常会显示每个变更集 ID 的缩短版本。 hg --debug tags 获得更长的版本。我在sites/3 上执行了该操作,将提示变更集ID 粘贴到sites/3 行的.hgsubstate 中,现在我可以再次提交。现在看来要清理了。感谢您的帮助!
  • 没有问题。我应该提到长格式(完整)哈希值。您可以在模板语言中将它们作为 {node} 获取:hg log --template '{node}' with '{node|short}' 让您获得您习惯看到的那些。
【解决方案2】:

对于那些难以对.hgsubstate 进行更改的人,似乎:

  • hg commit -i 不工作,而
  • hg commit -m 会。

【讨论】:

    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多