大型水银储存库是否遭受“推动种族”的困扰?


9

阅读一些“为什么DVCS更好”回答了有关Programmers.SE的几个问题。他们似乎都说,总的来说,DVCS更好,因为您没有大型项目中的提交竞赛,即IE提交,已经过时了,所以更新,提交,再次过时,提交,仍然过时等。

DVCS通过推送的概念限制了这一点。但是,在大型项目中,会不会有一场“推动竞赛”,尤其是在一天结束时?我知道在Git中这可以通过对所有事物的不断分支来弥补,但是在Mercurial中,您不需要分支,而是创建一个新的头部。

我看到的问题

  1. 用户尝试推送
  2. 过时(如果本地存储库过时,Mercurial不会让您推送),因此您可以拉并合并本地更改
  3. 用户尝试再次推送,但是当他们合并其他推送时,他们又过时了
  4. 再次拉并合并
  5. 仍然过时
  6. 重复

听起来有点熟?

这是非常大且受欢迎的水银回购的实际问题吗?当每个人都在最后一天努力工作时,在公司内部怎么办?


谁不涉足?hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
卡森·迈尔斯,

@Carson在git分支很便宜。在商业上,它们是永久的。通常,我听说在git中分支到某个功能,而在水银中创建一个新的头或克隆到另一个目录。
TheLQ 2011年

好了,您可以--close-branch在提交时添加一个-并且mercurial已经命名了分支,您不必克隆到新目录
Carson Myers

@Carson我并不是说你不能或不可能,我只是说我一直都在听到惯例是克隆或创建一个新的头,而不是分支。我见过的大多数商品回购只有几个分支,而git repos往往会有一堆
TheLQ 2011年

我不确定,我从未使用过git
Carson Myers

Answers:


8

据我所知,大多数使用DVCS的大型开源项目都使用“拉请求”而不是推,即用户请求项目从其分支中拉出,并且项目可以选择以任何顺序进行这些拉出请求,如果有的话。正如您所命名的,这消除了对“推动比赛”的需求。

在其他公司,我无法保证流程,但是在我工作的地方这不是问题。

看,当您处理案件时,您正在处理整个仓库的分支,因此您的推送请求将转到主干的远程版本。当您要将(完成的)更改集成到主干中时,可以加载主干,拉出,合并,推送。

偶尔(非常偶尔)会有两个人尝试同时执行此操作(通常是由于沟通不畅造成的)。在这种情况下,“丢失”的人将只需要重新拉,合并,推动即可。由于没有下午5点急于提交到中央存储库的问题,因此您所概述的问题并不存在。

这就是DVCS的优点:分支无痛,因此每个人都可以在自己的分支上工作。

编辑

哦,我只是注意到您的“自然而然地,您不会分支……”评论:是的,您做到了。您不必这样做,但是由于这样做非常容易,并且这样做的好处远大于不这样做的好处,因此您确实会倾向于只使用分支存储库。


我一直听说您会克隆以使用实验功能,而不是分支。我听到的大多数原因是,在Meruri分支比Git中的分支要持久得多。但是我可能错了
TheLQ 2011年

就是这样,就Mercurial而言,克隆分支,您仍然可以用标准的“ head”(以及更多的东西!)做几乎所有的事情,但是您拥有pull /的额外奢华推离行李箱的距离。我不确定您对永久性的含义,当克隆完成后,您可以删除它。
Ed James

为什么没有下午5点的推送高峰?
Cem Catikkas 2011年

就像我说的,大多数时候,每个人都在自己的分支机构上工作(您不太可能在与另一个人完全相同的问题上进行工作),因此,尽管每个人的确在一天结束时都将消息推送到了不同的分支机构。另外,在我的工作中,我们有弹性的时间,所以更像是高峰时间下午4点至下午6点;)
Ed James,

1

不,没有推动竞赛,因为工作是在主题分支中完成的。合并母版管理将分支合并为集成分支的(相对较低)的复杂性。通常这是连续进行的。有关分布式版本控制工作流的更多信息,第一个来源是马的嘴:man gitworkflows在线此处。尽管您的主张和技术类似,但Mercurial工作流确实使用分支。


OP在这里对git和hg进行了区分,但您的答案是针对git的(例如,第一个链接非常面向git)。这是一个正确的答案(因为OP最初对hg中分支的错误解释导致了问题本身),但是值得注意的是,对于hg也是一样。
Ed James

@Ed好点,已更新以澄清答案适用于git和mercurial。
Rein Henrichs

请参见存储库git.git,这是使用DVCS进行合并的一个很好的示例。有很多合并点。最终合并到主分支之前,可能同时有10个以上的临时分支。
linquize 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.