Mercurial - 我可以做得更好吗?

时间:2011-03-22 15:30:41

标签: version-control mercurial

我们已经使用Mercurial几个月了,它已经改善了我们的部署过程。这是很好的部分。

我们现有的系统正在运行,但如果您不小心或急于求成,它仍然容易出错。这让我想知道是否有方法可以改进它或者...也许我们完全偏离轨道:)

我们的环境包括:

  • 本地开发工作站(每个开发人员)
  • 开发服务器(托管数据库和中央存储库)
  • 验收服务器(完成QA的地方)
  • 登台服务器(我们将发布分支暂存,然后我们将robocopy移植到实时系统)

关于我们切换原因的一些背景知识:

我们处于一个工作环境中,经常让我们从一个任务切换到另一个任务,留下许多待处理的任务。当我们回到CVS时,许多人会变得陈旧和混乱。部署是一场噩梦,因为你必须解决需要上线的线路以及其他没有使用Beyond Compare的线路。

Mercurial与命名分支和轻松合并为我们解决了这个问题。所以不知道我们应该做些什么。

首先,我们清理了清理生产源,修剪死文件等等。

我们在暂存时将其设为FTP并将其作为“默认”的新存储库,这是我们的稳定分支,随时可以部署。

之后,我们对开发服务器进行了hg clone,并从开发默认分支中获得了每个开发人员hg clone

在接受我们进行QA的时候,我们做了hg clone开发服务器的默认分支。

此时我们到处都有稳定的代码副本,每个人都渴望开始!

本地计算机推送到dev,从dev接受并且暂存完全隔离,并且可以从提供路径的任何地方拉出。

现在这背后的想法是,我们系统上的默认分支将始终是实时服务器上代码的副本,前提是我们记得在启动新分支之前提取。在开始新功能时,我们会:

hg pull -b default #synch up
hg update default 
hg branch {newFeature} #newFeature completely isolated from other changes.

*work on {newFeature}

哦不!一个错误!这与我目前正在处理的内容无关,我们称之为{bugFix111}。这似乎需要一个独立于我的功能的新分支;返回更新的默认值。这将使newFeature和bugFix111彼此隔离,并且每个都可以独立生效,因为它们基于默认值。

hg update default
hg pull -u
hg branch {bugFix111}

完成工作后说{bugFix111}

hg push -F {bugFix111} #send our fix to the main central repo on dev.  

转到接受

hg pull -b {bugFix111} #pull the fix from the central repo (dev).
hg merge {bugFix111} #merge the code in the default QA branch.
hg commit -m "Merging {bugFix111} into default"

*QA sign off on the fix

我们必须分支接受 - 默认是QA发生并释放我们在签署时合并这些东西。

hg update release 
hg merge {bugFix111} #fix is now ready to go live
hg commit -m "Merging {bugFix111} into release"

暂存:

hg pull -b release {PATH TO ACCEPTANCE REPO}
hg merge release
hg commit -m "Merging {bugFix111} into staging default"
hg tag release{date}
*robocopy to live
*run task that pull from staging to dev so that they synch up again.

这一直在为我们工作并节省一些部署时间,因为只需自动复制稳定版本分支即可。

问题

我们注意到的是:

  • 在发布第二次合并时很容易合并,这似乎不符合流程。质量保证签字后我们可以打破它。

  • 也可以让QA测试我们的发布分支,但它似乎是复制资源,目标只是让功能隔离并且能够一次发送一个。< / p>

  • 我们可以通过合并释放错误来彻底打击它,例如:当你接受默认值时,hg合并版本会完全覆盖它。

  • 如果我们在开始新分支之前忘了拉,我们就是在错误的基础上工作。

  • 很少有其他奇怪的东西,但那些是最大的障碍。

我意识到这是一个很长的帖子,但希望答案能帮助像我这样的其他Mercurial新手尝试在他们的公司建立一个像样的工作流程。

1 个答案:

答案 0 :(得分:1)

为什么不从QA分支进行分期?然后合并作业已经完成并验证,即如果提交有一些手动合并,您也将在登台时导入它。否则,您必须在暂存时复制合并,就像现在这样做。