gpt4 book ai didi

version-control - Mercurial - 我能做得更好吗?

转载 作者:行者123 更新时间:2023-12-04 07:06:58 24 4
gpt4 key购买 nike

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

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

我们的环境包括:

  • 本地开发工作站(每个开发者)
  • 开发服务器(托管数据库和中央存储库)
  • 验收服务器(进行 QA 的地方)
  • 暂存服务器(我们暂存发布分支的地方,然后我们将 robocopy 复制到实时系统)

  • 关于我们切换原因的一点背景:

    我们所处的工作环境经常让我们从一个任务切换到另一个任务,留下许多待处理的任务。当我们回到 CVS 时,许多会变得陈旧并杂乱无章的主分支。部署是一场噩梦,因为您必须解决需要上线的线路和未使用 Beyond Compare 的其他线路。

    具有命名分支和易于 merge 的 Mercurial 为我们解决了这个问题。所以不知道会发生什么,我们设置了它。

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

    我们在登台时使用 FTP 并将其设为我们的新存储库作为“默认”,这是我们随时准备部署的稳定分支。

    之后,我们做了一个 hg clone到开发服务器并拥有每个开发人员 hg clone来自开发默认分支。

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

    至此我们到处都有稳定的代码副本,大家都跃跃欲试了!

    本地机器是 开发,验收 from dev 和 staging 是完全隔离的,如果提供了路径,可以从任何地方拉取。

    现在这背后的想法是,我们系统上的默认分支将始终是实时服务器上代码的副本,前提是我们记得在开始新分支之前拉取。当开始一个新功能时,我们会:
    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 发生并发布,我们在它被签署时 merge 这些东西。
    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.

    这对我们一直有效,并节省了一些部署时间,因为只需 robocopy 稳定版本分支就很容易。

    问题

    我们注意到的是:
  • 在发布时第二次 merge 时很容易搞砸 merge ,这似乎与流程背道而驰。我们可以在 QA 签字后打破它。
  • 也可以让 QA 来测试我们的发布分支,但这似乎是在复制资源,目标只是将功能隔离并能够一次发送一个功能 .
  • 我们可以通过 merge 发布错误来完全破坏它,例如hg merge release 当您处于默认接受状态时会完全覆盖它。
  • 如果我们在开始新分支之前忘记拉取,我们就是在错误的基础上工作。
  • 很少有其他奇怪的事情,但这些是最大的障碍。

  • 我意识到这是一篇很长的文章,但希望答案能帮助像我这样的其他 Mercurial 新手,试图在他们的公司建立一个体面的工作流程。

    最佳答案

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

    关于version-control - Mercurial - 我能做得更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5393661/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com