git,版本控制界的魔术师(1/18/2018)
不到一个月的时间,git入门的知识学了一次,并且写到了自己的博客上。
作为一个初学版本控制软件并且毫无从业经验的人来说,我学习的第一个版本控制软件就是git。所以很难将它和其他版本控制软件进行比较,git中一些思想也无法判断是不是Linus的独创,唯一能做的就是就事论事,仅仅从git本身来说。
git给我最深的印象,就是分支的操作,这也是我叫它魔术师的原因。
如果要我处理分支,那我肯定是会把文件拷贝一份,然后在复件上进行新的分支操作;据我所知,确实有一些版本控制软件是这样做的。但是git不是!git的分支其实就是一个指向提交对象的指针:提交新的提交对象指针就自动向前移动;恢复到某个提交对象就是把指针指向那个提交对象;删除分支就是删除指针。在当时学到这里并且自己操作的时候,给我惊喜和魔术的感觉。git保存了我们的文件快照(提交对象),而工作目录和分支的操作其实就是取决于我们想要看到哪个提交对象而已!
魔幻的地方在于:我当时自以为分支操作是在操作一份份文件的拷贝,而实际上git却仅仅是打开我们需要的那一份拷贝而已,就像打开一个文件夹那么简单!而一份份拷贝是日产工作中创建的。
git分支操作的乐趣和魔幻给我深深地印象,言语不足以表述当时的震惊。
回头再想,为什么git可以这样做呢?又不禁被git的设计震撼了。我们之所以可以在git上进行如此简单、快速的分支操作,是因为git是基于一个一个的提交对象搭建起来的,git操作就是在这些提交对象上操作。
git就是在连接成树型的提交对象上耍杂技。而提交对象是日常工作中慢慢地添加的,它们一次不会费太多资源,在不知不觉中就搭建了很大的树型结构。git提交对象的设计提高了分支操作性能,而提交对象在日常工作中是必须且逐渐的。
这就像一种哲学,平时在一点点积累,在一点点编织,到了关键时刻,发现只要简单的一招就可以克敌制胜。
理解了之后,我发现git的设计竟然如此的简单、奇妙和神奇。不禁感慨:KISS!
设计一个如此简单、灵活、快速的系统,我不禁为Linus的才智折服!
未来究竟是分布式的还是集中式的?
从git来看,分布式带来了很多好处;与此同时,云计算等技术又在无时无刻地加快集中化的进程。
我想,未来分布和集中会达到一个奇妙的平衡。而每个行业是的平衡点在哪儿?这需要我们去探索和创造。
领取专属 10元无门槛券
私享最新 技术干货