【问题标题】:Rename a local-only mercurial branch?重命名仅限本地的 mercurial 分支?
【发布时间】:2017-11-01 18:21:32
【问题描述】:

我发现很多关于重命名已经被其他人推/拉的 hg 分支的问题,但是我在这里遇到了一种情况,即已经在一组分支(总共 10 个)上完成了工作“错误”的名称 - 在 repo(在 bitbucket.org 上)对分支命名有限制的意义上是错误的。

任何开发人员都可以打开一个名为 app-feature-xxxx 的新分支(其中 xxxx 可以是任何东西),但是新开发人员已经完成了大量工作,并且没有一个分支遵循这种命名模式(这些分支实际上是xxxx 部分没有app-feature- 前缀)

目前这些分支只在他的机器上知道——它们从未被推送到 BitBucket.org,也没有被其他任何人拉取

它们可以在被推送之前就地重命名吗?现在 hg 正在尝试使用这些分支名称将他的历史记录提交给 BitBucket,但它失败了。如果可以在此之前重命名分支,那么一切都应该是金色的。而且没有通常的“但是其他人的历史呢?”问题,因为只有一个人有这些提交..

我现在能想到的最简单的方法是再次克隆 repo,只需创建一个 app-feature-lotsofupdates 分支,然后在原始 repo 中继续切换工作副本,并使用 diff 工具应用从原始仓库(名称错误)到这个新克隆的仓库的代码,在每次 diff/copy 之后提交 - 有效地将所有各种功能手动合并到一个分支中(然后将合并到生产中)

【问题讨论】:

  • 您可以使用the Convert extension 更改附加到提交的分支名称。这确实需要将 repo 发送到另一个 repo,因此使用它的最简单方法是将“坏” repo 一次性转换为新的“好” repo,然后从那里推送,而不是反复转换回来和第四次(尽管后者也是可能的)。
  • 如果没有解决,请评论,我通常会以更手动的方式解决这个问题。
  • 如果分支不包含合并(基本上是直线变更集),您可以使用mq 扩展和hg qimport 分支变更集到补丁中,hg qpop --all 删除它们,@ 987654328@和hg qpush --all重新添加补丁;否则,convert 扩展可能是唯一的方法。
  • 您可以使用 rebase 扩展将提交从一个分支移动到另一个分支。

标签: mercurial bitbucket


【解决方案1】:

您可以使用 Mercurial 的转换扩展程序和 branchmap 选项来执行此操作。

branchmap 是一个允许您在分支被重命名时重命名的文件 从任何外部存储库引入。当用于 结合拼接图,它允许强大的组合 甚至帮助修复管理不善的存储库并将其转为 进入结构良好的 Mercurial 存储库。分支图包含 表格行

original_branch_name new_branch_name

original_branch_name 是名称 源存储库中的分支,new_branch_name 是 分支的名称是目标存储库。

执行此操作的命令行类似于:

hg convert--branchmap branchmap.txtpath\to\source\repopath\to\converted\repo

Documentation.

【讨论】:

    猜你喜欢
    • 2022-08-09
    • 2011-01-22
    • 2011-09-29
    • 2013-08-25
    • 2021-01-20
    相关资源
    最近更新 更多