Git系列教程 - Chapter 1. Git基本介绍

Git系列教程

Chapter 1. Git基本介绍

Git是什么?

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的软件代码管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。现在几乎应用于所有开源项目管理和大型公司内的软件项目管理。

为什么要学习使用Git?

  1. 好用:可以方便的作为自己开发项目的版本管理,能够解决你备份、找回、控制进度等对代码的一切幻想。
  2. 协作:程序员从来都不是单打独斗,小到学校教研室,中到公司内多团队协作开发,大到如Linux一般的世界级开源项目都在使用Git。如果你完全不了解它,你很难与其他同行进行协同工作,也会失去很多与行业大牛接触的机会。
  3. 以上两点还不够??
  4. 好吧,某些情况下可以很装逼:当团队代码一塌糊涂的时候,你可以快速帮团队搞定混乱,如果恰好有个妹子。。。
  5. 你还想要?熟练掌握Git的你可以窥见一些项目管理和技术架构的理念:软件项目管理很大程度上就是管理代码进度,组织团队;大的架构也是各个子系统、模块、功能迭代组合而成的。当你可以使用Git来掌握一个项目的代码时,你一定可以把管理和架构串联起来,明白其中的道理。
  6. 原谅我,我真的编不出来了。。。

Git中基本对象

好的,如果你准备开始了解Git了,那么你可能会碰到一些熟悉或不熟悉的概念。本节就对Git中可能会经常碰到一些概念先做个说明。

仓库(Repository)

仓库,顾名思义就是放东西的地方,放什么呢?——代码。我们用Git来进行软件项目管理,仓库就是我们存放代码的地方。仓库本质上是一个文件夹,平时我们看到的仓库更像我们工程文件夹,只不过里面多了一个隐藏文件夹.git,其他看起来好像也没什么不同(最好的设计就是让你感觉不到设计——忘了谁说的)。

仓库分为两种类型,我们一起来看一下:

远端仓库(remote repository):远端仓库通常是指处于服务器上的一个文件夹,这个文件夹有一个特定的地址可供用户访问。用户可以从这个远端仓库下载代码,也可以将自己编写的代码推送到这个远端仓库中去。但通常我们是不能直接在远端仓库中进行操作的(其实平时你也看不到,你看到的只有远端仓库的地址),所有的操作我们都在本地仓库进行。

本地仓库(local repository):本地仓库就是前面提到的我们平时在自己电脑上的本地工程文件夹,这个文件夹下面有个.git的隐藏文件夹,这个隐藏文件夹里存放着仓库的信息。我们可以在这个本地的仓库进行编辑、从远端仓库更新、推送代码到远端仓库等操作。

分支(Branch)

分支,是软件管理的一个重要的工具。在软件开发的过程中,经常会遇到要并行开发多个功能,发布多个版本。不同的功能开发人员不同,要开发的东西也不同,不同的版本可能差别更大。你可能会说那就每个版本建一个仓库呗。但是V1.0版本的特性开发完之后可能后面的一个版本也会需要,如果多个仓库,那么就需要靠人工再写一遍这些开发过的代码,这不亚于重新开发一遍,甚至更加困难(一般看2个月之前自己写的代码都看不懂。。。)。

分支就很好的解决了这个问题,它允许一个仓库中同时有多个开发路线在并行,这些路线会在某个时间点被分叉出来,每个路线就成为了一个分支。分支也可以进行合并,这样就可以将其他分支演进的特性和版本合并到一起,避免重复开发(其实很多大的合并的时候也需要人工,但还是比重来一遍要好太多了)。

分支示意图

提交(Commit,Submit)

上面分支图中一个一个的圆点就是一个个提交。提交直观的理解是,我们编写了一些代码,想把它放到创库里去了,这时候就可以做一次提交,这样我们这一段时间编辑的内容就进入了Git仓库进行管理。Git仓库管理的单元就是提交了。每一个提交都拥有一个唯一的ID,通过这个ID,我就可以回到任何一次提交的时间点。就像你有一个编辑器编辑一个文档,每次保存就会生成一个新的当前文件的副本,在你任何时候可以找到任意一次保存的时候的文档状态,保存这个动作就是提交(当然Git并不是每次提交都会生成一个副本,那也太大了)。

提交会以链式的形式储存,如分支示意图所画的那样,每一个链就是一个分支。每个提交都会有一个或两个父节点,每个提交都保存着父节点的ID。而全局的层面上,提交与ID存在哈希对应关系,所以全局查找也是很快的。

小结

仓库、分支和提交是层级包含的关系,关系如下图所示。

仓库分支提交关系图

总结

本章主要介绍了Git的一些基本信息和概念,下一节我们开始学习如何使用Git。

《Chapter 2-Git基本用法之一》

猜你喜欢

转载自www.cnblogs.com/mamamiyear/p/Git-series_Chapter-1_Git-base-introduction.html