大中型开发团队如何不断推动对DVCS的改变?

我工作的公司正试图从集中式VCS StarTeam中脱身,并希望进一步改进。 我不想仅仅选择SVN,因为它是“简单的选择”(与我们今天的做法最相似)。 有人可以帮我理解一个大中型开发团队如何每天更改大约150个文件可以在像Git或Mercurial这样的DVCS上运行吗?

我们有:

  • 50位开发人员在一个存储库上工作
  • 15年的历史
  • 15,000个文件(主要是代码/文本)
  • 每天大约有150个单一文件签入
  • 由于我们独特的语言要求和数据结构,每天都需要从中心调整变化
  • 经过数天的研究和试验,我了解Git和Hg的过程和工作流程。 我不明白的是,需要对单个文件进行更改的大型团队如何能够在系统受到限制的情况下快速运行?

    例如:我可能正在处理3种不同的事情,开发者向我提出一个小问题。 我做了一点研究,做了必要的1行更改,并检入文件。 从我可以告诉的是,使用git我需要提交更改,隐藏所有其他更改,拉取,推送,应用存储,处理任何合并,以便将最近提取的代码隐藏起来。 有没有更好的办法?

    我读过关于Facebook从Git转换到Mercurial的文章。 他们如何在40,000个文件库中每天管理数千个签入? 我无法理解这将如何与DVCS的拉/推模型一起工作。 我对这些系统的工作流程或功能缺少一些信息。 也许他们不需要每天都拉/重新基地?

    任何帮助表示赞赏。


    我读过关于Facebook从Git转换到Mercurial的文章。 他们如何在40,000个文件库中每天管理数千个签入? 我无法理解这将如何与DVCS的拉/推模型一起工作。 我对这些系统的工作流程或功能缺少一些信息。 也许他们不需要每天都拉/重新基地?

    首先,Facebook不会以纯DVCS的方式使用Mercurial。 他们使用remotefilelog扩展(他们自己编写的)只根据需求提取变更集(这是因为Mercurial存储历史记录以便历史访问大多可以本地化)。 他们还为后端服务器使用MySQL和memcached来提高可伸缩性。

    对于重定位/合并瓶颈(当几十个开发人员需要将他们的工作同时集成到主分支中时),他们有一项工作进程中的功能,主要完成服务器端的工作; 我注意到这个瓶颈部分是因为(1)使用monorepo和(2)使用基于主干的开发,这个问题并不是每个大型组织都会有的。

    例如:我可能正在处理3种不同的事情,开发者向我提出一个小问题。 我做了一点研究,做了必要的1行更改,并检入文件。 从我可以告诉的是,使用git我需要提交更改,隐藏所有其他更改,拉取,推送,应用存储,处理任何合并,以便将最近提取的代码隐藏起来。 有没有更好的办法?

    您可以使用新的Git worktree功能(或者,对于Mercurial, hg share )可以对同一个存储库进行多个签出并独立处理它们。 市集和化石一直都能够做到这一点; Fossil还具有自动同步功能,可以像SVN一样进行操作(有注意事项),Bazaar一直能够以准中心的方式工作,并提交直接到服务器。 特别是,“每个存储库只有一次结账”主要是历史上的Git工件,而不是DVCS系统的代表(并且,正如我指出的那样,更新的Git版本已经消失)。

    也就是说,你通常必须提交 - > pull - > merge或rebase - >推动对主分支的更改; 这是一个折衷。 分布式模型允许您必须拥有简单的本地版本控制,以便正在进行的工作在准备就绪之前不会直接进入主存储库。 它也通常假设你的大部分工作都将发生在一个个人分支上,所以90%的时间只是承诺(偶尔会推)。

    请注意,与集中式VCS相比,您不会有更多或更少的冲突; 他们可能会出现在不同的点。


    总而言之,如果您对当前的VCS感到满意,并且无法确定切换的明确优势,则可能不值得更换VCS。 切换VCS会带来可观的成本(重建您的回购,重新培训您的开发人员,调整工作流程,调整周边工具,出现意想不到的过渡问题),这些成本需要通过同等可衡量的收益来抵消,以使其值得。


    我希望它会作为火焰战争来源迅速关闭,但是......

    我不想只选择SVN,因为它是“简单的选择”

    不好意思,你想工作还是受苦? 由于你最后一个(不是很清楚)的要求,真实的CVCS和相当好的分支合并可能是比伪CVCS模式下的任何DVCS更好的选择(请参阅SVN做什么比Git?fe更好)

    经过数天的研究和试验,我了解Git和Hg的过程和工作流程。

    相当粗糙和浅薄的理解,顺便说一句。 即使在Git中你也有

  • “分支”(而分支本身不是其他DVCS的分支)
  • 可变的历史
  • DAG
  • 例如:我可能正在处理3种不同的事情

    与VCS无关的方式是共同的(考虑到Mercurial,git-boys可能希望将其采用到Git)

    您创建了3个分支(“基于任务的开发”,“每个任务的分支”策略),每个分支有一些(任意)提交

    一位开发者向我提出了一个小问题

  • 提交当前工作目录“原样”
  • 返回到你本地历史的分歧点(最后共享变更集?)
  • “做一点研究,做必要的1行更改,并检查文件”
  • 开发人员将最后一个chanseset放在(您的)存储库的一部分上
  • 您可以返回到断点并继续工作

  • 我可能正在处理3种不同的事情,开发人员向我提出一个小问题。 我做了一点研究,做了必要的1行更改,并检入文件。 从我可以告诉的是,使用git我需要提交更改,隐藏所有其他更改,拉取,推送,应用存储,处理任何合并,以便将最近提取的代码隐藏起来。 有没有更好的办法?

    是的:既然Git 2.5,你可以克隆你的回购一次,但结帐多次。
    如果您创建了新的分支,您可以在单独的工作树文件夹中创建它,从而保持当前的环境不受干扰。

    请参阅“使用Git的多个工作目录?”。

    链接地址: http://www.djcxy.com/p/23279.html

    上一篇: How do medium to large development teams constantly push changes to a DVCS?

    下一篇: DVCS with Central Build/ automatic push to server feature?