你如何在hg中有一个工作流程,其中一个人经常提交?

时间:2017-11-17 23:27:40

标签: git mercurial

我的工作流程是非常频繁地提交和推送,然后在我准备好之后,将提交组合成一个提交(使用hetedit等)来清理日志。

使用git,我会做一个改变并推动。留下的悬垂头不会乱丢我的日志,最终会被垃圾收集。

对于mercurial,我最终得到了多个头。如果我关闭分支以摆脱陈旧的头部,我最终会有一百万个封闭的分支仍然出现在日志中。这违背了最初的目的。

如果没有完全搞砸日志,你如何在mercurial中拥有这样的工作流程?是否存在可以在mercurial下工作的替代工作流程?

请注意,频繁提交也会被推送到repo(仅为安全起见)。这意味着我不能完全使用像条带这样的东西。

2 个答案:

答案 0 :(得分:1)

考虑evolve扩展,最好在this post中解释,尽管它不是bitbucket特定的,并且在Mercurial环境中得到广泛支持。你可能安装了它,只需要启用它。

一旦你了解它,它就是世界上最好的。它允许一个提交替换另一个 - 它已经淘汰了另一个,即使它已被推送。它允许您以中断已推送的提交的方式重写提交。可以将其视为git --amendgit rebase,但对于已推送的内容是安全的。

当您推送一个废弃一个或多个其他变更集的变更集时,请为这些变更集推送过时的标记,随后从该仓库中提取的任何人都会在其历史记录/日志中将已废弃的变更集替换为您已推送的变更集。过时的变更集仍然存在,但它们不会使日志混乱。

我希望我们很快会在git中得到类似的东西 - 一些人已经开始研究类似的功能了。

答案 1 :(得分:0)

虽然@ Ry4an建议真的最佳方式(tm),但你可以使用另一种方式,只有"经典"发布的工具

  1. 在推送目标上使用[phases] publish=False(阅读和浏览phases)(另请参阅After pushing to a review repository, "abort: can't rebase immutable changeset" on rebasehttp://www.logilab.org/blogentry/88203了解相位)
  2. 在您身边使用任何历史记录重写方法
  3. 如果将变异的历史推送到不发布的回购仍然会创建额外的头(我懒得为你测试它) - 消除所有不需要的匿名分支(使用"脏"历史记录)使用dummy merges - 你在历史上会有很多合并,但只有一个真正的头脑