More than code
Welcome to the website

Git使用教程(一)

一、前言

从开始开发项目就一直在用git,一直有这个习惯,好处多多。开发自己项目的时候,无论在自己家还是在公司,都不用拿U盘拷来拷去;不用担心项目版本的控制,特别对于有些客户,今天认为这样好,明天认为那样好,后天又认为前天的好;代码备份根本不用考虑,代码完成一小阶段随时提交,对项目的管理也是很多好的习惯。今天系统的整理一下Git的相关教程,将知识梳理一下。

二、什么是Git(What)

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

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

三、为什么用Git以及Git和SVN的区别(Why)

很多人认为Git是世界上最先进的分布式版本控制系统(没有之一)。

1. 那么什么是版本控制系统?

如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:

想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去,最后你的Word文档变成了这样:

这种感觉真是很烦人。

更要命的是,有些部分需要你的财务同事帮助填写,于是你把文件Copy到U盘里给她(也可能通过Email发送一份给她),然后,你继续修改Word文件。一天后,同事再把Word文件传给你,此时,你必须想想,发给她之后到你收到她的文件期间,你做了哪些改动,得把你的改动和她的部分合并,真困难。

在开发项目的时候,我想基本上都会有与上面类似的感觉,Git的诞生就解决了这样的问题。结束了手动管理多个版本的时代,进入版本控制的新世纪。

2. Git 与 SVN 区别

很多人都知道SVN,在我们公司,特别是后台开发,他们都在用SVN。GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

  • GIT是分布式的,SVN是集中式存储:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。

    先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

    集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟。

    再说分布式版本控制系统,分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

    和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

    在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

    当然,Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面。

  • GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。

    意思就是GIT会在本地存储项目下的所有文件,因为本地存储的是一个远端的克隆版本,而svn则只需要checkout你需要的那部分代码文件到本地即可。所以通常本地的git目录的大小要远远大于svn的目录。

  • GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。

    分支在SVN中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行像这样的命令 svn propget svn:mergeinfo ,来确认代码是否被合并。所以,经常会发生有些分支被遗漏的情况。

    然而,GIT分支并不是一个另外的目录,创建GIT分支只是新建一个新的分支指针而已,所以Git 的分支可谓是难以置信的轻量级,GIT分支创建速度非常快,处理GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。

  • GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。

  • GIT的内容完整性要优于SVN

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

四、总结

本文介绍了什么是Git(What),为什么用Git以及Git和SVN的区别(Why)。在区别中还介绍了分布式版本控制系统和集中式版本控制系统的概念。下一篇文章将详细介绍Git的使用(How)。

赞(1) 打赏
未经允许不得转载:李帅帅空间 » Git使用教程(一)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏