我的团队刚开始使用Mercurial和一个中央存储库。我们让哈德森建立了“默认”分支的尖端 - 这基本上是我们的主线。我们的旧VCS签到了一个签到政策,在您登录主线之前必须完成代码审查,测试等工作。
所以,假设您正在处理功能X.您正在处理某些内容,基于“默认”,然后您将部分功能作为检查点。在本地,你的“默认”现在已经破了 - 你还没有与任何人分享,但如果你要推动,那么现在你已经在主线上破解了代码。
即使你等到你把它全部整理好了,似乎有些情况(例如同时处理两件事)你需要推动一些改变但不是全部。
此外,如果您检查所有检查点更改,那么将在主线中进行一些修改,而主线中的其他修订将不构建。
我们已经开始使用命名分支 - 但我读的越多,我认为我们错误地使用了命名分支。
有关如何设置良好的工作流程以便我们运行Hudson并保持主线政策的任何建议吗?
答案 0 :(得分:18)
首先,我强烈推荐A Guide to Branching in Mercurial
接下来,您可以推送当前分支:[** Nudge - 推送的更温和版本](链接现在陈旧)
也许你可以决定每个分支只允许一个头:32. Prevent a push that would create multiple heads
与命名分支相关的其他SO问题:
答案 1 :(得分:2)
您可能会考虑至少两个存储库。 “主线”存储库包含经过测试和审核的代码。代码仅在Hudson测试之后以及在您完成任何评论之后才被推送到此存储库。 “测试”存储库将是主线的克隆。这是Hudson监视的存储库,因此每当将变更集推送到测试存储库时,Hudson测试就是。您可以设置Hudson构建步骤,以便在测试通过时将更改从测试存储库推送到主线。
开发人员总是推送到测试存储库,但只从主线上拉,因此他们只需要提供经过测试的代码。如果他们需要共享未经测试的变更集,他们可以在彼此的本地存储库之间直接推/拉。也许可以将Hg配置为使得主线仅接受来自测试存储库的推送,以便开发人员不会意外地推送到主线而不是测试。
拥有评论存储库可能也不错。因此,开发人员推动测试,Hudson推动测试代码进行审核,然后审核代码推送到主线。
免责声明:我只是在琐碎的项目上以及琐碎的方式使用Hg。
答案 2 :(得分:2)
我们在公司所做的是使用命名分支来区分稳定版本(我们只提交错误修复)和下一个开发发生的版本,我们定期将修复从稳定版本恢复到默认版本(使用默认分支上的hg merge stable
。
对于代码审查,我们使用mq扩展来使开发人员能够提交干净的补丁。开发人员可以从彼此的存储库中获取,而不会污染参考存储库。
免责声明:我们不使用Hudson。
答案 3 :(得分:2)
这是一个心态问题。分布式VCS不需要您保留单个中央存储库。
不是让所有人都可以检查主线,而是使用有限的写访问权限进行设置。只有经过批准(测试,签字,对您有意义的)的变更集才会被纳入主线。
如何管理变更主线是一个广泛的问题,有许多可能的答案。这是我头脑中的两个:
答案 4 :(得分:0)
您还可以考虑使用Bookmarks扩展名而不是命名分支。
如果您熟悉git,书签的行为就像git-branches而不是mercurial branches。