4

我已经阅读过类似的 SO、官方 Hg 指南、许多文章和指南的帖子,但我仍然不清楚按功能开发的最佳 Hg 工作流程是什么。也许网络上的某些文章已有多年历史,并且不包含 Hg 的最新功能。显然,在如何处理它方面也有很多选择。

我是一名独立开发人员,正在从事一个项目,其中修复或功能的请求将作为任务提交给我,例如“任务 #546 - 更改任何内容”。其中一些任务需要几天时间,有些任务需要几个月的时间,而且通常一次要完成十几个任务。在请求者批准后,任务将被运送到最终站点。

Hg 指南似乎建议每个功能都有一个克隆。但是在我的驱动器上拥有该网站的十几个完整副本似乎......浪费?我愿意尝试,但我看到了其他更有意义的建议。人们真的在他们的开发机器上同时拥有每个站点的十几个副本吗?

起初命名分支听起来像我想要的,我会在哪里命名一个分支“任务 546”在它上面工作,然后在它发布时将它合并回来。我看到很多关于名称的永久性和有这么多分支的讨论(尽管它们可以关闭)。有些人似乎关心这一点,而有些人则不关心。我对 Hg 了解得不够多,无法知道我是否关心,以及缺点的真正含义。

最后,书签似乎在最近的文章中很受欢迎,使用它们的最佳方法似乎是设置一个像“task 546”这样的书签,然后当你使用提交消息将它合并回主分支时其中的任务编号,以保持对工作中正在完成的工作的引用。我知道您可以删除书签,但不清楚在最终合并后是否需要这样做。

所以我对组合方法的想法是:

一个回购

三个命名分支:

  • “默认”保存网站的发布版本
  • 我在其上进行功能开发的“dev”
  • “测试”将保存客户正在审查的所有任务

在“开发”分支上,我会为我正在处理的每个任务使用书签,所以我对每个任务都有一个负责人

我的任务/功能工作流程是:

  1. 更新到名为“dev”的分支的主线
  2. 使用任务“task #123”的书签开始一个新分支
  3. 提交更改,直到我准备好让客户审查
  4. 将“task #123”合并到“test”分支
  5. 将“test”部署到测试服务器
  6. 重复提交、合并、部署,直到准备好生产
  7. 获得批准后,使用包含任务名称的提交消息与“dev”分支的主线合并
  8. 将“dev”合并到“default”分支中。
  9. 将“默认”分支部署到实时服务器
  10. 将“默认”合并到打开的功能分支中

想法?我是否最好为每个功能都有一个克隆,以及我推送的“实时”和“测试”存储库?

编辑:我从一些链接中看到我应该从“默认”进行开发,所以我对列出的流程的第一个更改是使用名称“生产”分支而不是命名“开发”分支。

4

2 回答 2

3

书签式的分支(类似于 Git 的“分支”)至少在两种常见情况下效果不佳

  1. 开发过程中的跨任务合并
  2. 时光倒流机,当您想查看“任务#123 的整个更改历史”时(您可以在视觉上进行操作,并且可以通过一些鬼脸和跳跃,使用 revsets)

虽然使用命名分支没有这样的问题,顺便说一句,使用命名分支(并且只有默认分支作为聚合点)的工作流将不那么复杂,更合乎逻辑的方式

  • 默认只包含来自任务分支的合并集,默认的头总是“稳定版本”
  • 指定分支机构的负责人是 WIP;分支,合并到默认 - 完成(并被客户接受 - 见下文)工作
  • 默认,合并到任务分支(在任务开发之后,将任务分支合并到默认之前)相当于您的“测试”:在不影响主线的情况下,您可以测试功能的最终状态,集成到您的稳定应用程序中,向客户显示结果
  • 通过将命名分支合并到默认分支,将已接受的工作添加到稳定的主线
  • 通过对日志使用单一、简单、简短、令人难忘的修订集,可以轻松恢复过去每项任务的更改历史记录(完整历史记录):-r "branch(TASK-ID)"
于 2013-06-30T10:33:22.193 回答
1

我喜欢。+1。这是我会做的方式。

于 2013-06-30T04:45:02.837 回答