处理一些棘手的问题,并希望得到社区的一些帮助。基本上,我们的开发团队分为两个团队,让我们说“红色”和“蓝色”
3回购:
1:主人
2:红色>>克隆大师
3:蓝色>>克隆大师
每个开发人员都在他们工作的本地计算机上克隆红色或蓝色。
两个团队都在为我们的主要应用程序开展各种任务。每个团队都有一个我们的共享“主”存储库的副本,他们正在应用他们的变更集。变更集在该级别进行验证,此时可以将它们推送到主服务器中。
为简化起见,假设开发人员A和B都在Red团队中。
所以问题出现在开发人员A推动变更集1,然后开发人员B推动变更集2.然后变更集1被验证并准备进入主数据集但变更集2不是。
我想尽快将变更集1推送到Master,而不是等待验证更改集2,特别是因为在此期间可能会引入变更集3。
我们目前正在使用mercurial并且我喜欢它 - 如果我想要做的工作流程更容易,我愿意切换到git。
我在想这个错吗?我很感激帮助。
答案 0 :(得分:3)
在您描述的具体案例中:
我想将变更集1推送到Master 尽快,而不是等待 验证变更集2, 特别是因为变更集3可能是 在此期间被引入。
您需要做的只是hg push -r cset1
,其中 cset1 是您想要的cset的修订号或节点哈希值。
当您使用-r
进行推送时,它会推动更改及其所有祖先,因此您可以在不推送changeset2的情况下推送更改集1,但不会更改集2而不推送更改集1 强>
如果您需要将它们推出(两个但不是一个),那么您将使用TransplantExtension进行樱桃采摘,但只要您按顺序进行,您就可以轻松选择。
(注意,为了避免“两个但不是一个”场景,最好的计划是让任何一个人写第二个特征hg update zero
。这样两个和一个将是兄弟姐妹(两个孩子都是零)比父母 - 孩子更自然地反映他们的真实关系,如果它们确实是可分离的特征。这可以通过分支明确地完成,但严格地使用变更集父母也是完全有效的操作模式。)
答案 1 :(得分:0)
当TeamA
准备推送更改时,您将TeamA合并为master,当TeamB
准备就绪时,您将TeamB合并为master。
定期下线TeamA
& TeamB
应从Master
获取/合并以确保其版本具有最新代码。
如果您需要更多示例,请查看Gitorious / Github的设置方式。每个开发人员都有自己的项目克隆,然后当他们准备就绪时,他们申请合并到主仓库。
同样的原则可以应用于Merc,关键是要确保经常获取/合并到Team Repos(Developer Repos)以确保将新代码引入其开发周期。
答案 2 :(得分:-1)
我不熟悉mercurial中的分支,但是这里你是如何在SVN中做到的 - 我相信它是等价的。您需要设置分支,而是将更改集合并到/ trunk。这允许您挑选和选择哪些修订版本,而不仅仅是“svn up”并将其全部完成。
例如,您可能会有类似
的内容/branches/dev
/trunk
在这种情况下,/ trunk被假定为当前稳定代码,它将在生产时运行。假设您只想推动红队的修订版100和蓝队的修订版110.从内部/主干,您可以这样做:
svn merge <host>/branches/dev -r 99:100
svn merge <host>/branches/dev -r 109:110
只有在这些特定修订中所做的更改才会合并到/ trunk。