Git - 简介

Git是什么?

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

Git这种良好支持分支管理的分布式的SCM真正解决了这个问题:

每个工程师在自己本地分支上开发,完成功能以后往master分支合并。

分布式Git相比集中式CVS/SVN的最大区别在于:

开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。

Github发展

说到Git不得不说Github.

Github是一个从Ruby社区诞生出来的项目。Git虽然是Linux内核社区开发出来的,但前几年一直不温不火。真正在开源社区普及和爆发,是从Ruby社区和Github开始的。

Github本身也是这种需求下的产物,一些湾区的Ruby社区的程序员使用Git以后,找不到好的Git托管网站,于是就开发了Github出来。然后Rails框架率先迁移到Github上,形成了示范效应,整个Ruby社区都迁上去了。

Ruby社区另有一好处:各种开源库和包都统一用Gem格式发布,而一旦大量Gem都迁移到Github上了,Ruby程序员就跟着都开始用Github了。

Ruby社区是一个相当团结的社区,很少分裂,经常是一旦采用一个技术,整个社区就会迅速跟进和普及。虽然在国内Ruby是个小众的编程语言,但是在硅谷,Ruby很火,被誉为云计算时代的Web编程语言。

Ruby整个社区都迁移到Github,开始对其他编程语言社区形成示范效应,其他编程语言社区接着跟进。

Ruby程序员因为做Web开发,经常用JavaScript,很多Ruby社区核心人员本身也是JS社区的核心人员,JS社区也就很快进驻Github。同时Ruby社区因为DHH的示范效应,基本上整个社区都是人手一台Mac,天然对OSX比较近,而随着iOS开发的繁荣,大量的Ruby程序员跟进开发iOS app,带动iOS社区也从Github上成长起来了。

iOS程序员熟悉的CocoaPods就是用Ruby开发的。

看看今天的Github,Ruby,JS和iOS的项目比例是非常高的,Java比例则远不如Sourceforge和Google Code,这有一定的社区渊源。

1 关于版本控制

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

有以下三种版本控制系统:

1. 本地版本控制系统

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单。不过坏处也不少:有时候会混淆所在的工作目录,一旦弄错文件丢了数据就没法撤销恢复。

为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。

这里写图片描述

2. 集中化的版本控制系统

集中化的版本控制系统( Centralized Version Control Systems,简称 CVCS )能够让在不同的开发系统上的开发人员协同工作。像Subversion都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

多年以来,这已成为版本控制系统的标准做法:

这里写图片描述

3. 分布式版本控制系统

分布式版本控制系统(Distributed Version Control System,简称 DVCS ),像 Git,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份:

这里写图片描述

更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

2.关于Git

Git是分布式版本控制系统的一个完美实现,它与集中式版本控制系统SVN的基本区别如下:

1.Git是分布式的,而SVN不是

Git和SVN一样有自己的集中式版本库或服务器。但,GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库。

2.Git将内容按元数据方式存储,而SVN是按文件。

所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。

3.Git分支和SVN分支的不同。

SVN的分支就是版本库中的另外一个目录,而Git的分支却是整个版本库的一个快照,而且可以在同一个工作目录下快速的在几个分支间切换。

4.Git没有一个全局的版本号,而SVN有。

SVN的版本号实际是任何一个相应时间的源代码快照。而Git并没有这样的一个全局版本号,这也是Git缺少的最大的一个特征

5.Git的内容完整性要优于SVN。

Git的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

3.Git的基本工作流程

  1. 在工作目录中修改某些文件。
  2. 对修改后的文件进行快照,然后保存到暂存区域。
  3. 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值