分布式源代码控制 - 推动各个变更集

时间:2010-05-04 18:51:32

标签: git version-control mercurial dvcs patch

处理一些棘手的问题,并希望得到社区的一些帮助。基本上,我们的开发团队分为两个团队,让我们说“红色”和“蓝色”

3回购:
1:主人 2:红色>>克隆大师
3:蓝色>>克隆大师

每个开发人员都在他们工作的本地计算机上克隆红色或蓝色。

两个团队都在为我们的主要应用程序开展各种任务。每个团队都有一个我们的共享“主”存储库的副本,他们正在应用他们的变更集。变更集在该级别进行验证,此时可以将它们推送到主服务器中。

为简化起见,假设开发人员A和B都在Red团队中。

所以问题出现在开发人员A推动变更集1,然后开发人员B推动变更集2.然后变更集1被验证并准备进入主数据集但变更集2不是。

我想尽快将变更集1推送到Master,而不是等待验证更改集2,特别是因为在此期间可能会引入变更集3。

我们目前正在使用mercurial并且我喜欢它 - 如果我想要做的工作流程更容易,我愿意切换到git。

我在想这个错吗?我很感激帮助。

3 个答案:

答案 0 :(得分:3)

在您描述的具体案例中:

  

我想将变更集1推送到Master   尽快,而不是等待   验证变更集2,   特别是因为变更集3可能是   在此期间被引入。

您需要做的只是hg push -r cset1,其中 cset1 是您想要的cset的修订号或节点哈希值。

当您使用-r进行推送时,它会推动更改及其所有祖先,因此您可以在不推送changeset2的情况下推送更改集1,但不会更改集2而不推送更改集1

如果您需要将它们推出(两个但不是一个),那么您将使用TransplantExtension进行樱桃采摘,但只要您按顺序进行,您就可以轻松选择。

(注意,为了避免“两个但不是一个”场景,最好的计划是让任何一个人写第二个特征hg update zero。这样两个和一个将是兄弟姐妹(两个孩子都是零)比父母 - 孩子更自然地反映他们的真实关系,如果它们确实是可分离的特征。这可以通过分支明确地完成,但严格地使用变更集父母也是完全有效的操作模式。)

答案 1 :(得分:0)

  • TeamA
  • TeamB

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。