【发布时间】:2020-01-13 03:48:57
【问题描述】:
我目前正在处理 BitBucket 放弃 HG 支持的后果。我们将尝试hg-git,因为虽然我的偏好是自托管,但我的老板还没有对 Atlassian 感到非常生气而无法离开 BB。借此机会在转换为 GIT 之前清理我们现有的 HG 回购。使用hg convert 删除了一些意外提交的二进制文件以减小大小等。
我注意到的一件事是,我们有大约两打旧分支在技术上是“开放的”,但已合并到默认分支中(没有关闭提交,但它们已有数月至数年的历史)。有什么方法可以使用hg histedit 或hg 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