Mercurial将几个变更集作为一个单一变更集提交

时间:2011-11-25 07:23:33

标签: mercurial

我有一个问题。现在,假设我们有两个存储库,一个稳定的存储库和一个开发人员存储库(这是中央的子级)。假设我在调试和清理我正在处理的功能时在开发人员存储库中做了几次提交(大约十次)。

假设我已完成该功能的使用,并将其推送到中央存储库。一切都很好,但是,我希望能够以某种方式过滤中央存储库的日志。据我所知,它将显示我对开发人员存储库所做的所有提交的信息。是否有可能以某种方式过滤并显示历史日志中的推送信息?我的意思是把它视为单一的大提交 - 一个稳定的提交。

据我所知,在中央存储库中,更改集不会合并为一个,我希望看到的是推送的历史记录,而不是 changesets

4 个答案:

答案 0 :(得分:4)

  1. 你不能拥有不同历史的本地仓库和推送目标 - 你必须为history-strip构建中间本地仓库
  2. 除了Raghuram提供的链接外,我还记得Histedit extension

答案 1 :(得分:1)

据我所知,推送历史并未记录在任何地方。您唯一能做的就是使用中央存储库上的一个钩子来自己记录它们,但它将是独立的,而不是正常流程的一部分。

唯一有点相关的是hg log -m,它只显示合并。考虑到在任何开发分支的末尾往往会有一个合并,这可能很有用,但前提是人们在他们的合并上放了一个有用的提交消息,而不仅仅是人们似乎做的“合并”。

答案 2 :(得分:1)

我可以想到两种解决方案。然而,两者都有其缺点。

假设您的开发提示为“D”且稳定提示为“S”。

1)您可以使用rebase扩展名。首先,复制您的开发人员仓库并运行:

hg -b <D> -d <S> --collapse --detach

确保使用最新版本的Mercurial(稳定提示)。最近有几个修复程序影响了rebase的这种特定用法。缺点是您必须分别与开发分支中的每个修订版合并。

2)您可以像往常一样合并您的存储库,但不是提交您的合并使用以下黑客。 SS

hg update <S>
hg merge <D>
...resolve conflicts if necessary...
...but do not commit!...
hg debugsetparents <S>
hg commit -m "Squash merge from devel branch"

这样我们强制只使用一个父进行提交。这是一个黑客,因此不推荐。但它对我来说非常合适。

答案 3 :(得分:0)

我想你正在研究如何concatenate changesets。该链接提供了多种选择。