我想了解哪种方式更好地实现了我将与Mercurial展示的工作流程。我知道如何在Git中做到这一点,我对此更有信心,但无法用Mercurial找到令人满意的方式。
工作流程如下:我想跟踪上游分支,其中开发工作由其他人完成,并在其上维护一个相当小的补丁分支。我将如何处理Git如下:每次我想要包含一些新的上游提交,我在上游分支(或相关提交,BTW)上修改我的补丁分支,也许修改一些提交并强制推送补丁分支到与我的协作者共享的存储库(我知道非快进推送的问题,我的协作者也是如此;我们知道如何避免问题)。
我想对Mercurial做同样的事情。主要的问题是,每次我推动一个新头,前一个不会像Git一样被删除(好吧,提交并没有真正删除,但它们几乎消失了,因为它们不是任何祖先分支了;它们最终会被git gc
真正删除,这对我来说没问题。所以我的存储库仍然受到许多旧的提交的污染,我不再需要了。我无法找到任何方法来删除它们(除了可能一个一个地删除它们,但这不是一个真正的解决方案)。
使用Mercurial有更好的方法吗?
换句话说,我想要做的是自动删除所有在预定集合中不是某些提交的祖先的提交。
编辑:由于有人要求提供更多详细信息,我会尝试更精确。我从这个存储库开始:
C <upstream>
|
B
|
A
|
然后我开发了一些补丁:
F <patch>
|
E
|
D
|
C <upstream>
|
B
|
A
|
在某些时候,上游增加了一些提交:
F <patch> I <upstream>
| |
E H
| |
D G
| |
C ---------+
|
B
|
A
|
我在其上修改我的补丁分支,也许修改补丁中的内容并到达此处:
F' <patch>
|
E'
|
D'
|
I <upstream>
|
H
|
G
|
C
|
B
|
A
|
然后我推送远程Mercurial存储库中的所有内容:
F' <patch> F
| |
E' E
| |
D' D
| |
I ----------+ <upstream>
|
H
|
G
|
C
|
B
|
A
|
Mercurial并没有自动删除D,E,F头,但我希望它消失。我经常执行pull / rebase / modify / push循环,并且想要删除不再相关的旧剩余的commts。我该怎么做?
感谢。
答案 0 :(得分:1)
我知道疼痛并没有方便的自动解决方案。我尽量不要过多累积(使用hg heads -t
定期检查)并使用hg strip
从存储库中删除不需要的更改集。剥离不是逐个完成的(变更集),相反,如果你选择正确的变更集,那么它通常只是每个rebase循环的一个条带,因为所有剥离的变更集的后代也被剥离 - 存储库不能有孤儿。找到正确的变更集有点单调乏味,但由于通常只涉及少量补丁,因此使用hg glog
并不太困难。
答案 1 :(得分:0)
如果您的业务任务
你有至少两个(没有深度测试的肮脏思维)以更多Mercurial方式做到的方法
<强>科路强>
ANYNAME
中!=默认值(默认最常用于上游)paths
部分中设置upsteam-repo以便能够从中获取ANYNAME
,解决冲突,如果有的话ANYNAME
分支hg push -b ANYNAME
(副作用:上游合并的父母也会被推送)<强> MQ-方式强>
paths
部分中设置upsteam-repo以便能够从中获取hg qinit -c
),除了&#34; base&#34;