小甲鱼 发表于 2016-4-21 02:55:10

Git实用教程3:理论基础(很重要)

我觉得如果没有写上“很重要”,78.3% 的鱼油会跳过这一讲,看都不看一眼 {:10_262:}

不过既然被我骗进来了,那就认真看吧,因为这节课真 TMD 重要( ⊙ o ⊙ )啊!


Git 记录的是什么?


如果你有使用 SVN 等其他版本控制系统的经验,你应该知道它们的工作原理是记录每一次的变动。



差不多就是上面酱紫,每一次版本迭代,SVN 记录的是文件的变化内容。通常让我们自己来写一个版本管理工具也会首选这样的思维吧?就像写小说一样,每次就增加一个章节,修改若干错别字,最终装订成册……没必要为每次的修改都拷贝一整本书!这种存储方式也是有名堂的,叫增量文件系统(Delta Storage systems)。

而 Linus 童鞋这次却决定剑走偏锋,以一种看似“异端”的方式来处理版本迭代:



如上,如果每个版本中有文件发生变动,Git 会将整个文件复制并保存起来。这种设计看似会多消耗更多的空间,但在分支管理时却是带来了很多的益处和便利(分支管理我们后边会讲,不急)。

突然想到了一句话:普通的程序员是把很多的时间放在写代码和调 Bug 上,而优秀的程序员是将更多的精力放在设计上……

{:10_267:}

警告:前方高能,请先洗脸!!!

三棵树




你的本地仓库有 Git 维护的三棵“树”组成,这是 Git 的核心框架。

这三棵树分别是:工作区域、暂存区域和 Git 仓库



工作区域(Working Directory)就是你平时存放项目代码的地方。

暂存区域(Stage)用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息。

Git 仓库(Repository)就是安全存放数据的位置,这里边有你提交的所有版本的数据。其中,HEAD 指向最新放入仓库的版本(这第三棵树,确切的说,应该是 Git 仓库中 HEAD 指向的版本)。

OK,Git 的工作流程一般是酱紫:

1. 在工作目录中添加、修改文件;

2. 将需要进行版本管理的文件放入暂存区域;

3. 将暂存区域的文件提交到 Git 仓库。

因此,Git 管理的文件有三种状态:已修改(modified)、已暂存(staged)和已提交(committed),依次对应上边的每一个流程。

等等……

看到这里,有些鱼油肯定有疑惑:“你说 Git 仓库用于存放每次的版本迭代,我可以理解。但为何还要多增加一个暂存区域呢?”

我这里打个比方:像某些厂家开发一个产品,一般他们都留有一手,不会把该产品的所有特性一次性发布。通过产品的迭代,每年秋季你就可以开开心心地买到又有一两项新功能的“新”产品了。

{:10_319:} 我好像知道的太多了……

So,有时你并不想把工作目录中所有的新功能都提交到最新版本,你就可以先添加一些本次需要提交的文件到暂存区,然后从暂存区中提交它们……所以暂存区在江湖中有个外号叫“索引”(Index)。

记住这三棵树,因为后边教的所有 Git 操作基本上都是在这三棵树之间搞来搞去!

zooo 发表于 2016-4-21 08:30:31

本帖最后由 zooo 于 2016-4-21 10:12 编辑

沙发{:5_101:}
鱼哥,VIM魔鬼训练营的小练习什么时候更新啊,,,

007他哥008 发表于 2016-4-21 08:38:43

不错哟

zhangzhilin 发表于 2016-4-21 08:46:35

更新哈

selam 发表于 2016-4-21 09:23:26

等待更新 ~~~·

opqrew99 发表于 2016-4-21 09:38:45

果然厉害

sky 发表于 2016-4-21 09:43:26

{:10_277:}居然是to be continued

542624047 发表于 2016-4-21 10:57:41

{:10_250:}{:10_266:}bei pian le. hai you xue xiao de po jian pan hai you po shuru fa dou bu xiang da han zi le!   wo xiang jingjing!{:10_250:}

hostmi 发表于 2016-4-21 11:07:52

我是看到重要进来的

ston77 发表于 2016-4-21 12:30:01

坐等vim课程,突然发现,这俩图动起来 {:10_250:}{:10_281:},有意思

Daxi 发表于 2016-4-21 15:26:53

还没更新就把人骗进来了{:10_266:}
87.3%是怎么统计的{:10_254:}

小甲鱼 发表于 2016-4-21 19:09:44

zooo 发表于 2016-4-21 08:30
沙发
鱼哥,VIM魔鬼训练营的小练习什么时候更新啊,,,

{:10_275:} 厉害哇,过阵子我出个 2.0 版,再难点~~~

101℃太阳 发表于 2016-4-21 22:13:46

来围观、 养肥了再杀

零度非安全 发表于 2016-4-21 22:24:17

如果暴力不是为了杀戮,那就将变得毫无意义

三林小猎人 发表于 2016-4-22 11:36:21

期待更新!!

anthoney 发表于 2016-4-22 17:01:57

都是午夜更新{:5_103:}

dvdvdv 发表于 2016-4-23 18:23:16

不哦错的!

ianquan 发表于 2016-4-24 14:08:49

鱼哥,svn就是把每一个添加,修改的文件放到一起,而git就是每一次更新,修改都会复制上一次的代码然后再添加,这就像软件的历史版本一样,我理解的这样对不对?@小甲鱼

木之赓 发表于 2016-4-25 19:23:24

不错不错

DingRan 发表于 2016-5-5 11:12:53

朕!!!
页: [1] 2 3 4 5 6 7
查看完整版本: Git实用教程3:理论基础(很重要)