一起学Git:欲学Git请先忘记

来源:互联网 发布:比特币 软件 编辑:程序博客网 时间:2024/05/21 07:49

啊!!

 

错了错了,欲学Git,请先忘记。

 

倚天屠龙记中一段描写的非常精彩,是关于张无忌如何学到太极拳和太极剑的,摘录如下:

张三丰道:“老道这路太极剑法能得八臂神剑指点几招,荣宠无量。无忌,你有佩剑么?”小昭上前几步,呈上张无忌从赵敏处取来的那柄木制假倚天剑。张三丰接在手里,笑道:“是木剑?老道这不是用来画符捏诀、作法驱邪么?”当下站起身来,左手持剑,右手捏个剑法,双手成环,缓缓抬起,这起手式一展,跟着三环套月、大魁星、燕子抄水、左拦扫、右拦扫……一招招的演将下来,使到五十三式“指南针”,双手同时画圆,复成第五十四式“持剑归原”。张无忌不记招式,只是细看他剑招中“神在剑先、绵绵不绝”之意。张三丰一路剑法使完,竟无一人喝彩,各人竟皆诧异:“这等慢吞吞、软绵绵的剑法,如何能用来对敌过招?”转念又想:“料来张真人有意放慢了招数,好让他瞧得明白。”

    只听张三丰问道:“孩儿,你看清楚了没有?”张无忌道:“看清楚了。”张三丰道: “都记得了没有?”张无忌道:“已忘记了一小半。”张三丰道:“好,那也难为了你。你自己去想想罢。”张无忌低头默想。过了一会,张三丰问道:“现下怎样了?”张无忌道: “已忘记了一大半。”

    周颠失声叫道:“糟糕!越来越忘记得多了。张真人,你这路剑法是很深奥,看一遍怎能记得?请你再使一遍给我们教主瞧瞧罢。”张三丰微笑道:“好,我再使一遍。”提剑出招,演将起来。众人只看了数招,心下大奇,原来第二次所使,和第一次使的竟然没一招相同。周颠叫道:“糟糕,糟糕!这可更加叫人胡涂啦。”张三丰画剑成圈,问道:“孩儿,怎样啦?”张无忌道:“还有三招没忘记。”张三丰点点头,放剑归座。张无忌在殿上缓缓踱了一个圈子,沉思半晌,又缓缓踱了半个圈子,抬起头来,满脸喜色,叫道:“这我可全忘了,忘得乾乾净净的了。

 

在开始学习 Git 的时候,就跟张无忌学习太极的一样,要先忘记其他版本控制系统(例如 SVN和 Perforce 等)的各种概念,以免混淆。

Git 在保存和处理各种信息的时候,虽然操作起来的命令形式非常相近,但它与其他版本控制系统的做法不同。

 

Git和其他版本控制系统最大的区别是,Git直接记录快照,而非差异比较。Git 只关心文件数据的整体是否发生变化,而大多数其他系统(CVS,SVN,Perforce,Bazzar)则只关心文件内容的具体差异。


下图是Git的存储方式:

 

可以看到:当我们在Version 1的基础上修改了A和C文件并提交到Git仓库时:

        1. Git扫描版本控制下的所有文件:对于有变化的文件生成一个文件快照(对该文件压缩,所以记录的是全部内容);

            没有变化的生成一个链接,链到之前的快照。(修改并进行add命令后完成此操作)

        2. Git生成一个索引,该索引指向当前时间下所有文件快照。通过该索引即可找到当时所有文件的内容和状态。(在提交后完成此操作)

 

而SVN不同,上面是SVN的存储方式:可以看到,每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容,记录的只是diff文件。

在Version2中只是记录了file A和file C的变化。如果只给我们Version 2的版本信息,是得不到文件的全部内容。

 

下期介绍:

为什么在提交时需要add一下在执行commit操作,直接操作commit不就可以了吗?

在执行add命令后,生成了快照文件,是怎么生成的呢?快照形式是什么样呢?

索引是怎么把本次commit和文件进行连接的呢?

Git背后究竟影藏着怎样不为人知的秘密?

 

请看下期:Git暂存区

 想要知道关于Git更多内容,请继续关注:一起学Git

0 0
原创粉丝点击