`
check
  • 浏览: 1742 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于git以及分布式SCM的一些观点

阅读更多
这几天对git感兴趣,看了一些web cast以及一些相关文章,形成了一些观点,却还不成文章,零零散散说一下,欢迎大家一起讨论。

第一感觉与第一感觉所造成的影响

自从有了协作开发以来,大家就开始有了管理代码的需求,说到底,软件工程里有什么比代码更重要的呢?所有的实践均围绕着最终如何形成以及形成什么样的代码。最早期如果需要两个人一起写一段代码,最终一定是需要某一个人把两个人的工作合并在一起,于是产生了自动代码管理工具的需求。CVS的出现是基于于这个需求的第一感觉解决方式————找个地方把代码放起来,大家都来这里改代码(提交自己的delta)。这样做的影响是什么呢?
  1 当参与人数越来越多的时候,人员素质开始良莠不齐,即使合格的程序员往往对项目的理解也存在这样或那样的分歧,而最终的保存代码的地方只有一个,究竟那些人有权限提交代码开始演变成一场政治游戏。
  2 当代码越来越庞大的时候,单个人对全体代码的了解越来越少,于是开始变得越来越不关心,只求自己的事情做完,而欠缺对周围的考虑。好比自家的厕所往往很干净,而公共厕所往往臭不可闻。于是代码越来越庞大,越来越像一个迷宫。

这个表还可以继续列下去,不过我只就自己想的清晰的部分展开讨论,模糊的地方还有赖大家一起完成清晰化。对于1,后续的SCM和一些软件工程实践尝试在Centralize Model上打补丁,比如局部提交权限等perforce,svn特性。更常见的,相信很多项目都有所谓的sanity check(也有叫smoke的),也就是说一次提交至少要在本地机上通过了某些基本测试,不会影响到其它模块在回溯测试中的表现,才被允许提交。在我以前工作的地方,如果提交的代码break sanity,提交人是要买donut回办公室来赔罪的。然而这样的标准极大的挫伤了大家的提交积极性,小改动小feature影响不明显,然而我曾经见过某个大feature连续两次miss大版本cut,最后找人专门fine merge了两个多月。而对于2,由于代码对团队中大部分人都是未知远多于已知,最近几年大家都寄望于某些可以提高代码质量的实践,从最早的极端重视文档,到重构,再到现在流行的code review。然而这些都是基于一个假设————项目内有一个最重要的中心代码主干。综上所述,由最初的一个第一感觉所形成的一个模式,衍生出了很多SCM软件以及软件工程实践,下面简单论证一下很多这些东西在分布式SCM内并不需要。

分布SCM为什么没有以上问题

首先这个帖子不介绍git或者mercurial,相关信息应该不难获得。大体上在一个分布式环境中并没有一个每个人都提交和签出代码的主干,然而澄清一点,这并不代表每个开发人员的每个分支都是同等重要的,大家可以看一下这个网站。在分布式的情况下并没有什么人掌握着整个项目的提交权限与发放。每个人git clone自己要的code base,自己git push自己的版本,需要的人(或许是integration manager,或许是lieutenant)git push自己所信任的分支。一个项目完全可以建立一个experiment branch,甚至个人也可以建立任何随兴而至的branch(然而在centralize model里建立分支是每个人都能看见的,相当于一个平面DAG,每个人所看见的都是这个DAG,于是这个DAG必须“有意义”)。从这个角度看,git最大的优点就是没有随意假设任何东西,比如一个共有空间来存放代码,而是提供了一系列的工具方便大家交换和共享代码,自然也可以轻易用这套工具来构建类似于cvs/svn/p4的centralize model。

分布式SCM对软件工程的影响

较为常见的思潮是分布式更适合松散的开源编程。我不同意这样的看法,我认为分布式和松散组织没有逻辑上的必然联系。分布式SCM最大的优点就是把具体的人和代码紧密地联系在了一起。我想我们大家都厌倦了所谓的PPT架构师。kernel.org至今没有谁号称是架构师,Linus本人甚至贡献了超过2%的代码。我认为git很容易形成这样一种风气:无论是你自己写的,还是你pull别人的代码,你最终要对自己repo里的代码负责。我相信在git的环境中,大家不需要组织定期的重构,因为别人如果看不懂你的代码结构是不会pull你的repo的,同样的原因,也不需要强制性的code review。你如果无法举证你的改动是有效的,同样不会被pull(这样写单元测试至少是直接的压力)。无论是lieutenant还是dictator本人都需要非常的在意自己的代码质量,因为在git环境中pull与不pull是对质量的一个评价,这是Centralized SCM所欠缺的(会有一些侧面的指标尝试量化,从而吸引大家追求,进而产生number hack practices,偏离初衷)

话有些乱,主要目的是抛砖引玉,引起大家对distributed SCM的兴趣,进而一起讨论。
分享到:
评论
4 楼 check 2009-12-23  
如果说还有什么没有完胜的,大概就是使用习惯吧,毕竟这个世界上还存在认为VSS有价值的人。

关于merging的复杂性,第一以pull为主要获取手段的git/mercurial等已经可以做到总有合适的人做合适的工作了,第二技术上毕竟还有诸如cherry picking等等手段。即使你仍然觉得繁琐,相比svn等已经是不可同日而语了。

linus本人曾经嘲笑svn着重介绍branching有多快多快,然而merging才是衡量效率的关键,可见分布scm这点已经走在前面了。
3 楼 callmechen 2009-12-14  
我仔细研究了一小下GIT,感觉分布式还是无法解决“合并”的繁琐。所以单纯看Configuration Repository的话,Git这种分布式确实存在优势,但结合诸多的平台、插件,应该说还没到那种“完胜”的程度吧~
2 楼 check 2009-07-02  
Hooopo 写道


订正了,谢谢
1 楼 Hooopo 2009-07-02  

相关推荐

    git分布式代码管理教程

    ### git分布式代码管理教程 #### 一、Git简介与安装 **Git** 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 的设计目标是为了解决开发过程中代码版本控制的问题,它具有快速、数据...

    1分布式Git-分布式工作流程

    本文来自git-scm.com,这一章中,你将会学习如何作为贡献者或整合者,在一个分布式协作的环境中使用Git。文章的第二篇你现在拥有了一个远程Git版本库,能为所有开发者共享代码提供服务,在一个本地工作流程下,你也...

    Git开源分布式版本控制系统

    Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。Git 易于学习, 占地面积小,具有闪电般的快速性能。它具有Subversion,CVS,Perforce和ClearCase之类的SCM工具,具有廉价...

    git分布式系统管理

    ### Git分布式系统管理知识点 #### 一、Git简介 **Git**是一种先进的分布式版本控制系统,最初由Linus Torvalds为了更好地管理Linux内核源代码而创建。它能够高效地处理从小型到非常大型的项目版本管理问题。Git的...

    Git说明书电子书,有pdf和epub版本,主要讲解Git怎么使用

    git-scm.com官方开放免费版权的电子书progit,有pdf和epub版本,主要讲解Git怎么使用: 1. 起步 1.1 关于版本控制 1.2 Git 简史 1.3 Git 是什么? 1.4 命令行 1.5 安装 Git 1.6 初次运行 Git 前的配置 1.7 获取帮助 ...

    分布式版本控制系统 版本管理 git的介绍和使用教程

    分布式版本控制系统 版本管理 git的介绍和使用教程 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何大小项目的版本管理。以下是一个详细的Git使用教程,包括Git的下载与安装、基本使用、远程仓库操作、...

    Introduction-to-Distributed-Source-Code-Management-with-git:git分布式源代码管理入门研讨会-git source code

    git分布式源代码管理简介。 源代码管理/版本控制 您希望从源代码管理系统获得什么? 进行实验,不会丢失数据 开发过程的文档 轻松备份 与(远程)同事轻松协作 没有开销(文件混乱,文件锁定,服务器管理) git概述...

    windows64位git安装包

    Git是分布式版本控制系统,它在软件开发领域尤其是开源项目中起着至关重要的作用。Windows 64位Git安装包是专门为64位Windows操作系统设计的Git版本,确保在该平台上高效稳定地运行。官方下载的Git安装包可以保证其...

    分布式版本控制系统Git.docx

    ### 分布式版本控制系统Git详解 #### Git概述与版本控制系统工作模式 - **Git**是一种分布式版本控制系统,广泛应用于软件开发领域,特别是开源项目中。它由Linus Torvalds于2005年创建,旨在更好地管理和追踪...

    分布式版本控制系统git的使用详解

    ### 分布式版本控制系统Git的使用详解 #### 一、Git简介 Git是一种先进的分布式版本控制系统,被广泛应用于软件开发项目中。与传统的集中式版本控制系统(如SVN)不同,Git采用分布式架构,这意味着每个开发者的...

    Git-2.28.0-64-bit git安装包windos64位官方下载

    Git是世界上最流行的分布式版本...以上就是关于Git-2.28.0-64-bit的详细说明,包括Git的基本概念、安装过程、常用命令以及一些高级特性。使用Git,可以极大地提升软件开发的效率和质量,同时保障团队合作的顺利进行。

    Git超级简明手册

    Git是一款非常流行的分布式版本控制系统(Version Control System, VCS),它的出现极大地推动了软件开发行业的协作方式。版本控制系统的历史中出现了多种类型,例如CVS和SVN都是早期的集中式版本控制系统,而...

    Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何大小项目的版本管理

    Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何大小项目的版本管理。以下是Git的详细教程,涵盖基础安装、基本使用、远程仓库操作及分支管理等方面: 一、Git安装 下载Git: 访问Git官网...

    git压缩包下载git下载

    在本篇中,我们将深入探讨Git的核心概念、功能以及如何下载和安装Git。 Git的核心概念: 1. 仓库(Repository):存储项目所有版本和历史信息的地方。 2. 分支(Branch):代表项目的不同开发线路,主分支通常命名...

    Git-2.39.0-64-32(版本构建于2022-12-12)

    Git是世界上最流行的分布式版本控制系统,它允许开发人员追踪和管理代码变更,协同开发软件项目。Git-2.39.0-64-32版本是Git在2022年12月12日发布的一个更新,适用于64位和32位操作系统。这个版本的发布通常包含了...

    git工具安装包.zip

    Git是分布式版本控制系统,它使得开发者能够方便地追踪和管理代码变更历史,是现代软件开发不可或缺的工具之一。本文将详细介绍Git以及与之相关的Git GUI和TortoiseGit这两个图形化界面工具,以及如何下载和安装它们...

    git教案-v2.0.docx

    Git 是一个强大的分布式版本控制系统,它的核心设计目标包括高速、简单的设计、对非线性开发的支持以及处理大型项目的能力。Git 的诞生源于 Linux 内核项目的需要,Linus Torvalds 在 BitKeeper 服务停止提供后,...

Global site tag (gtag.js) - Google Analytics