分散式版本控制系统如何改善工作流程?

时间:2012-03-01 22:35:59

标签: git version-control

我真的试图了解分布式版本控制系统如何改变我们的工作方式。我观看了一篇关于Linus Torvalds on git的技术演讲,主要讲述了分布式版本控制的强大功能,并声称它改变了我们工作的方式。

让我们考虑一下git。爱和使用git有很多充分的理由,我知道这些充分的理由。我也确信分散模型的强大功能并不仅限于提高效率和进行本地提交的能力。其中一个重点是它允许开发人员同步他们的工作。假设工作尚未提交,我会假设代码(可能)不适合部署,可能会发生变化(如果我很难将我的依赖项与它联系起来那么糟糕),这听起来像是一个痛苦的世界等待展开。

我感觉分散模型在Linus所面临的设置中运行得非常出色,但这在大多数设置或需求中通常不常见,并且集中式设置本质上是我们在统一网络中想要和使用的(即大多数公司设置,虽然我承认这是我的假设)。我们都将东西推回到中心位置,以便我们可以与其他人分享,这种集中化的需求构成了github的基础。我们都依靠中心位置的完整性来提供对我们工作的安全访问,并为我们提供支持。

不要回答为什么git很可爱。它在集中模型中运行得非常出色,具有本地提交的奖励,但我真的觉得我错过了关于分散工作流程的地方......我可能不得不再次观看视频

更新

感谢您提出这个问题,我认为我的观点并不是特别明显。基本上我面临的问题如下。许多公司都设有中央工作流程。我们致力于统一的快速本地网络。管理集中管理配置的后勤工作稍微简单一些;我们都使用中央存储库,这是蜂蜜罐,我们确保防止磁盘故障和火灾以及你可能会偏执的任何其他事情。将这种必要性考虑在您的工作流程中会增加您的工作(无论状态如何)最终进入这个安全位置的机会。我们依靠这个中心位置的网络连接和可用性来处理我们共享的所有内容。我首先想到的是,我们对中央工作流程的热爱可能就是我们无法掌握如何在微观尺度上使用DVCS。现在说只是使用git,因为它是集中式变体的超集,我猜是好的。然而,鉴于我仍然在大多数情况下看不到分散模型固有的任何东西,我们可能会使用更复杂的工具来解决更简单的问题。集中式工具可能有一些价值,可以完成我们现在正在做的事情。

5 个答案:

答案 0 :(得分:3)

Git改善了工作流程,因为合并不再是痛苦的事情。

如果您曾经使用SCM与单个项目的多个开发人员合作,您应该知道合并是您必须处理的第一个问题。假设你观看了视频,你已经知道Linus已经花了很长时间来详细说明这个问题,以及为什么这是其他SCM的主要问题。

我将重述Linus在你说你看过的视频中所做的例子,但是这里有:

假设有3个开发人员,包括您自己,正在开发一个包含3个部分的项目。您是所有工作方面的专家。假设您已被指定为存储库的维护者,则另外两个开发人员可能会要求您将代码合并到主分支中。但!你不是他们工作的专家,你不一定需要了解他们的代码如何工作......但你相信他们所做的改变是可以的。使用git,您可以将合并的责任(读取:工作)转移到它们。一旦他们提取了代码,将他们的代码合并到代码中并提交了代码,他们就会要求您提取合并后的代码。

为什么这样好?因为他们完成了所有的工作,他们理解他们正在合并的东西。没有git,这个过程无疑会非常痛苦和耗时。

答案 1 :(得分:2)

DVCS允许您在不影响其他人工作的情况下完成工作,直到准备就绪。

因此,您可以在本地解决所有错误和集成不兼容问题,然后将其发送出去。

答案 2 :(得分:2)

我会尝试回答问题

排序版本

任何DVCS本身都不能改善工作流程。所以问题“怎么样?”快速和简单的答案是“绝不!”

更长版本

DVCSes 有可能性(由于分布式特性),可用于改变和演变工作流程和共同的工作方式。但它总是不是技术,而是管理,行政和组织解决方案和责任:什么,如何,何时,解决哪些业务任务使用DVCS是可行且合理的。

一开始,我可以看到DVCS的一大业务优势 - 它允许开发人员之间进行P2P通信,减少这种方式在CVCS模式下浪费。

它可以有用和要求吗?任何时候,当2个以上的开发人员从事相关工作,但与“主流”任务相隔离时。想象

  • 某些系统具有核心和前端以及分离的责任区域(coredev不触及前端,主管不能用核心做任何事情)
  • 核心和前线的一个回购,没有外部回购(一体化)
  • 前面的小工作需要核心变更
  • 前端文件位于/views/default/main/lib.js,core-file / core / db / connectors / engine(但在我们的示例中,深度位置没有实际价值)

SVN版本,每操作分支模式

  • Frontman与WC合作,与分支“branches / lib2-frontend”(不稀疏副本)相关,当“狗屎发生”时
  • Coredev创建分支“branches / lib2-fixes”,成功执行更改,提交
  • Frontman监控回购并等待Coredev的最终提交
  • Frontman必须以某种方式更新他的工作和文件。启动mergevoodoo magic
  • 如果一切正常,主持人必须在他的提交中消除某种方式从coredev核心文件中提交合并

DVCS版本

故事并没有大大缩短,并且在一个地方有所不同 - 当coredev完成他的工作时,分支交付给主唱,在本地合并。以后合并的工作可以分支清理 - 剥离到准备发布公共表格(挑选樱桃,历史重写等)

答案 3 :(得分:1)

  

我真的觉得我错过了关于分散工作流程的观点

无论我在哪里使用Git,无论是个人(Github)还是工作,它主要是一个集中模型。然而,我看到分散模型的唯一优势是速度。我很确定在白天本地中提交几次会更快,然后在当天结束时触发push到中央仓库。将(速度)与每天多次提交到远程存储库进行比较。

答案 4 :(得分:0)

我很困惑,你在这里想要了解的是什么?你基本上说“我知道为什么git很棒”,然后继续问“为什么git很棒?”这种感觉并不是一个真正的问题,或者至少是一个在要求的内容中含糊不清的问题。

如果您具体询问DVCS如何改进工作流程,那么我会说它确实每个用户都有自己的存储库副本,因此可以完全独立工作,但仍保留合并的能力与其他人一起工作在同一个存储库中。

Ex:说Joe正在研究“项目A”,我也在研究项目A. Joe&我可以疯狂,做提交,重构等等,但在一天结束时仍然结合我们的代码(这实际上是Github的模型 - 你分叉项目,做疯狂的东西,但因为你的副本是一个克隆原始文件,总是可以轻松地将您的更改合并到原文中。

但我觉得我错过了你所要求的东西。

你或许也想看看Version Control By Example这是一本免费的电子书,它讨论了不同DVCS的各种优缺点(git只是一个)。也许你寻求的答案就在那里。