【问题标题】:Edit commits in HG repo & mark as "closed"在 HG 存储库中编辑提交并标记为“已关闭”
【发布时间】:2020-01-13 03:48:57
【问题描述】:

我目前正在处理 BitBucket 放弃 HG 支持的后果。我们将尝试hg-git,因为虽然我的偏好是自托管,但我的老板还没有对 Atlassian 感到非常生气而无法离开 BB。借此机会在转换为 GIT 之前清理我们现有的 HG 回购。使用hg convert 删除了一些意外提交的二进制文件以减小大小等。

我注意到的一件事是,我们有大约两打旧分支在技术上是“开放的”,但已合并到默认分支中(没有关闭提交,但它们已有数月至数年的历史)。有什么方法可以使用hg histedithg convert 之类的工具返回并专门用--close-branch 标记旧分支头?

查看文档,我可以找到有关编辑文件、编辑提交内容或修改提交消息的内容,但我找不到任何关于提交是否“关闭”的元数据。我知道这只是给定提交的一个标志,但我不知道如何通过任何 HG 扩展追溯添加它。

编辑:为了更清楚一点,我知道我可以更新到每个旧分支并添加一个新的提交来关闭分支。会有很多看起来悬空的、封闭的头,但这已经足够好了。 然而,我还必须在 HG 中给他们每个人一个书签,否则这些额外的“关闭”提交会在 hg-git 转换中丢失。我宁愿避免在 git 分支列表中添加约 30 个额外的分支,只是为了让它们在 HG 中正确显示为关闭,而不必使用 revsets。

我想要做的不是回购大计划中的“必要”,但如果编辑提交的元数据说--close-branch 是不可能的,我会感到惊讶。

【问题讨论】:

  • 您可以通过hg heads --closed查看没有任何扩展的磁头关闭状态(只有磁头可以关闭)
  • 抱歉,我的问题并不清楚,@planetmaker。我说的是已合并的旧分支头。我想追溯用“关闭”标志标记这些提交,这样它们就不会出现在 TortoiseHg 的分支列表之类的东西中(尽管我知道我可以通过 rev-set 主动过滤掉它们。
  • 您是否考虑过使用--topo 标志,例如hg heads --topo?这只给出没有子节点的头,因此不包括合并的头。
  • 不知道那个标志,非常有用。然而,这与命令行级别的“寻找头”关系不大,更多的是与存储库的一致性和对默认值的期望(例如 TortoiseHg 的默认分支列表)有关。对于某些脚本,我一直在使用 hg log -r "head() and not(closed()) and sort(date('>$date'))" --template "{branch}\n" 之类的东西来过滤掉这些旧的边缘情况;但我宁愿纠正它们而不是过滤掉它们,因为无论如何我现在都必须重建 repo。
  • 我自己没有尝试过,但是你能追溯添加一个关闭分支,然后将原始合并重新设置为默认值,以便它跟随关闭吗?由于您正在重建 repo,因此您可以以通常不会对已发布的更改执行的方式进行 rebase。

标签: mercurial tortoisehg mercurial-extension


【解决方案1】:

我用一个模拟存储库测试了 rebase 的想法,它似乎有效。

这里是开始的 repo:

这是变基后的状态:

我认为这个例子与问题的内容相符。原始的悬空关闭分支变更集已移至合并之前。

我更新为默认值并运行以下命令:

hg rebase --dest=4 --source=3 --keepbranches --config=ui.merge=internal:merge

我实际上使用 Tortoise Workbench 来执行变基,这就是它使用的命令。所以ui.merge 的最后一个参数可能不是绝对必要的。

您可能已经注意到使用hg convert 在您修改存储库时创建新的克隆是一个非常好的主意。因此,如果它搞砸了,你有一个简单的撤消选项。我当然也会推荐这种操作方法。

【讨论】:

  • 好的,仍然是最佳答案;适用于简单的情况,但并不理想。 HG 似乎重新设置了源和目标之间的每次提交。在示例中,差异很小,但我的命令是:hg rebase --source=35 --dest=2999 --keepbranches --config=ui.merge=internal:merge & 我放弃并在一小时后将其杀死(完成 50%)。此外,如果没有该配置选项,我必须手动批准我机器上的每个 kdiff3 合并;设置似乎试图自动解决合并冲突。变基后不会有太大变化,但日志中发生了很多合并/变基;需要更快地做到这一点。
  • @Lovethenakedgun 它可能没有足够的差异值得,但您可以更改一些设置以使 rebase 运行得更快 - 至少如果它没有遇到冲突(它不应该在这种情况下)-stackoverflow.com/a/55403657/3195477 以我的经验,这确实加快了速度。
猜你喜欢
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 2012-08-19
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多