这是我第一次使用DVCS而且作为单独的开发人员,我第一次实际使用分支机构,所以也许我在这里遗漏了一些东西。
我有一个远程存储库,我从中取出文件并开始工作。更改被推送到远程存储库,当然这个简单的方案工作正常。
现在我的Web应用程序有一些稳定的功能,我想开始部署它,所以我将远程存储库克隆到我的工作目录之外的新分支/稳定目录中,用于默认分支并使用:
hg branch stable
创建一个新的命名分支。我创建了一组仅由stable分支所需的部署脚本,并且我根据需要提交了它们。再一次,这很好。
现在当我回到我的初始工作目录来处理一些新功能时,我发现Mercurial坚持只有一个头在远程存储库中。换句话说,我必须合并两个分支(默认和稳定),将不需要的部署脚本添加到我的默认分支,以便推送到主存储库。如果我必须对我的稳定分支中的文件进行更改以便部署,这可能会变得更糟。
如何在Mercurial中将我的命名分支分开?我是否必须创建两个单独的远程存储库才能这样做?在这种情况下,命名分支失去其价值。我在这里错过了什么吗?
答案 0 :(得分:11)
使用hg push -f
强制创建新的远程头。
push
默认情况下不会这样做的原因是它试图提醒你拉动和合并以防忘记。您 想要发生的事情是:
现在分支X在远程仓库中看起来像这样:
--(100)--(101)
\
\---------(102)
如果他们正在检查分支机构,新开发人员应该抓住哪个头?谁知道呢。
答案 1 :(得分:3)
在重读Mercurial书中的section on named branchy development之后,我得出的结论是,就个人而言,最佳做法是拥有单独的共享存储库,每个分支一个存储库。我在bitbucket.org的免费帐户上,所以我试图强迫自己只使用一个共享存储库,这就产生了问题。
我咬了一口子并给自己开了一个付费帐户,这样我就可以为我的稳定版本保留一个单独的共享存储库。
答案 2 :(得分:2)
您写道:
我发现Mercurial坚持只有一个人在远程存储库中。
为什么你认为是这种情况?
来自hg push
的帮助:
默认情况下,如果检测到结果,push将拒绝运行 增加远程头的数量。这通常表明了 在推送之前,客户忘记了拉动和合并。
如果您知道有意在远程存储库中创建新头,并且这是可取的,请使用-f标志。
答案 3 :(得分:1)
我来自git期待同样的事情。只是按下顶部看起来可能是一种方法。
hg push -r tip