【问题标题】:How to update to a branch by name when there's a hash collision?发生哈希冲突时如何按名称更新到分支?
【发布时间】:2017-01-26 01:03:02
【问题描述】:

所以我的同事刚刚中了哈希彩票。我们按照约定 b##### 其中##### 是问题编号,为我们解决的每张工单创建一个功能分支。

问题在于,当他尝试通过hg up branch(b29477) 更新到那个分支(在它存在之前)时,它把他带到了default,而不是说这个分支不存在。

事实证明,branch(b29477) 实际上返回了括号内事物的分支名称(而不是像我想的那样强制 Mercurial 将括号内的事物评估为分支名称!),所以碰巧以b29477 开头的变更集是默认的,所以不是说分支不存在,而是将他带到了默认的尖端!

现在我们可以通过选择不同的分支名称来解决这个问题,但我想知道有没有办法hg update <branch_name_and_dont_interpret_this_as_anything_else>


顺便说一句,hg log 谎报 --branch 参数的作用。它说:

-b --branch BRANCH [+]   show changesets within the given named branch

但这根本不是真的。继续并使用哈希运行它。例如,

hg log --branch eea844fb

它会出现结果。如果您仔细阅读文档,您会发现它实际上与以下内容相同:

hg log -r 'branch(eea844fb)'

【问题讨论】:

    标签: mercurial


    【解决方案1】:

    试试这个:

    hg update -r "branch('literal:b29477')"
    

    从 Mercurial 帮助页面:

    分支(字符串或集合)

    属于给定分支的所有变更集或 给定变更集的分支。

    如果字符串以 re: 开头,则名称的其余部分被视为 正则表达式。要匹配实际上以 re: 开头的分支, 使用前缀文字:。

    这意味着如果您使用 literal 前缀,您指定的是一个 stringstring 不是 set

    如正文所述,如果您指定变更集,Mercurial 将显示:

    给定变更集的分支

    【讨论】:

    • 我怀疑你会发现书签和标签的问题。使用类似这样的东西:hg update -r "bookmark(mpenBkMrk)"hg update -r "tag(mpenTag)" 就足够了。
    • 明确一点,答案是否定的。命令hg update -r "branch()" 不接受标签和书签,只接受分支和集合。
    猜你喜欢
    • 2011-01-21
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2017-06-01
    • 2014-04-10
    • 1970-01-01
    • 2013-09-01
    • 2015-04-07
    相关资源
    最近更新 更多