我正在使用default
分支进行持续开发,现在将创建一个新的命名分支来标记发布.所有进一步的开发将在默认分支上,所有生产错误修正将在新的一个(随后合并到default
)完成,如下所示:
#>hg branches
aristotle 42:dbd...
default 41:da5...
#>hg branch
default
#>echo "Feature #1 for the next release" >> feature1.txt
#>hg add
#>hg commit -m "Implement feature #1 for the next release"
...... eek, need to make an urgent fix on Production .....
#>hg update aristotle
#>echo "Fixed urgent bug #123 on Production" >> fix123.txt
#>hg add
#>hg commit -m "Fixed bug #123 on Production"
created new head
#>hg update default
#>hg merge aristotle
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, dont forget to commit)
#>hg commit -m "Merge in the fix for bug #123"
#>hg push
Run Code Online (Sandbox Code Playgroud)
以上似乎要走的路,但它似乎很容易把事情搞得一团糟并围绕合并的其他方式(从default
到aristotle
,这意味着所有的新功能将出现在分公司生产).
也许我的恐惧毫无根据,因为在将提交推送到中央仓库之前会注意到混乱,但我想看看是否有可能使方法更加万无一失.
所以我开始研究钩子:
[hooks]
pretxnchangegroup.branch = hg heads --template "{branches} " | find "aristotle" && exit 1 || exit 0
Run Code Online (Sandbox Code Playgroud)
..但后来意识到这不是我需要的东西,因为这根本不允许我推动亚里士多德的变化.
所以我不知道该怎么做.理想情况下,我希望开发人员在尝试将合并提交default
到aristotle
本地时看到"错误的合并方式"消息(显然,应该对中央存储库进行双重检查),而从生产分支合并到默认的应该是有可能.
谢谢!
这几乎与几天前的问题完全相同确保分支之间的合并发生在一个方向
但我不喜欢我对那个问题的回答,那么这个怎么样:
为过去的版本保留单独的克隆。在上面的示例中,当您决定需要对亚里士多德进行紧急修复时,请执行以下操作:
cd ..
hg clone -r aristotle myrepo myrepo-aristotle
Run Code Online (Sandbox Code Playgroud)
那么你就有了一个仅包含亚里士多德的克隆,并且你不会意外地将其合并到该克隆中的默认值。
也就是说,这仍然不是一个很好的答案。唯一真正的安慰是,如果你在一个你不喜欢的方向合并,你总是可以重新克隆两个头并在另一个方向合并。