春秋战国(Git)与大秦王朝(Svn)的爱恨情仇
关于Git的概念相信很多人都有所了解,但又不太了解。单从技术的角度去分析对于理解能力不太强的同学显得苍白无力。于是乎我试着用举例子的方式去还原繁杂的技术概念。
众所周知,秦始皇是我国历史上第一位实现全国大一统的最高领导者,称之为始皇帝。在秦朝之前是各诸侯国所僵持的春秋战国时期,周天子是传说中的傀儡Boss,面对虎视眈眈的各诸侯国,终于有一天阿政控住不住他自己了,决定带领秦国干上一番大事业,这才有了后面那么多惊天地泣鬼神的故事。(本文中的历史真实性有待考证,笔者只是按照需要举例子~)
1.Git分布式,Svn集中式:
Git的用户如同是春秋战国时期的各个诸侯国,每个国家有属于自己的土地(Git的本地版本库),每个国家也就有各自的商品(需要版本控制的代码或文件)。而所有的诸侯国需要定期向周天子(Git的远程版本库)汇报国家的发展情况,并且把国家新添加的商品发给周天子让他做统计,然后每次从周天子那里获取一些自己国家没有的商品,这样保证国家之间在没有交互(Git不需要联网)的情况下所拥有的商品都是一样的,只是每次向周天子汇报的时候需要派出使者去沟通(向远程版本库同步才需要联网)。
Svn的用户如同是秦始皇统治时期各个郡县,每个郡县是不允许有自己的土地(本地版本库),它们拥有的一切都归大秦王朝(Svn仓库),郡县生产的所有商品(需要版本控制的代码或文件)都统一交给国家保管。在每次生产新的商品前先从国家获取现在已有的商品。这样做的好处是保证商品的规范性、安全性,国家规定何种产品如何生产,包括使用什么原材料,使用何种工艺,而且生产的商品必须是指定的秦朝郡县才能交给国家(Svn需要局域网)。
这里重点强调的是国家的概念,只有国家才会拥有自己的商品仓库,主要是说明分布式与集中式的区别。
2.Git是把内容按照元数据方式存储,而Svn是按照文件:
先来理解概念:
元数据(MetaData)就是是描述其它数据的数据
快照(Snapshot):关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。
春秋时期各诸侯国统计自己商品内容是按照元数据的形式,将所有商品不论是否改变都以快照形式登记在册,这样在诸侯国的仓库记录中就会有所有时间段历史记录。
大秦王朝就不一样了,泱泱大国那么多事,怎么可能所有时间段都登记在册,只是将有过“增删改”的商品记录即可。
3.Git和Svn对网络的需求:
Git是目前为止最好用的版本控制系统,与其说最好用不如说最适合当下的项目需要。如今互联网项目如雨后春笋,发展迅猛,当初Svn之类的集中式版本控制系统需要局域网使用就变得很鸡肋,不同项目组开发同一个项目就需要使用vpn进行代码的交互。而Git是分布式版本控制系统,可以有各自的版本库不需要频繁交互,完美解决了这个问题。
可以想象成一个国家是一个网段,春秋时期各诸侯国相当于在不同网段,需要周天子这个互联网才能通讯,但是毫不影响商品的生产。大秦王朝是自己独有的网段,各郡县只有在自己国家才能通讯,假如你再非秦地界生产了商品是没办法传给你们嬴老大的。
4.Git和Svn对分支的使用:
Svn是一个完整的目录,一个用户若开辟新的分支当前所有Svn用户都会有该分支,Git有本地仓库的概念,假如新建了分支用于测试只要不提交到远程仓库,这个分支只有本地仓库才会拥有。
春秋时期,一个百姓生产了一个转基因商品,没敢和其他商品一起交给诸侯国,自己新建了分支交给诸侯国,国家也知道这个技术不成熟,所以就没有告诉周天子,恰巧这个转基因商品有毒,导致诸侯国百姓中毒身亡,该诸侯国亡矣,周天子不小心笑出了声,告诉其他诸侯国要小心这种转基因,并且给该诸侯国派去了新的劳动力及现有商品。
大秦王朝,一个郡县生产了一个转基因商品,没敢和其他商品一起交给诸侯国,自己新建了分支交给秦王朝,结果第二天全国的郡县都有了这个分支的转基因商品,关键这个商品有毒,导致秦百姓中毒身亡,秦朝亡矣。(千万别当真~)
5.Git的内容的完成性优于Svn:
Git在commit(存储在本地)或者push(上传到远程仓库)之前,通过对文件的内容或目录的结构计算出一个SHA-1哈希值,作为指纹字符串进行内容的校验,并将此结果作为数据的唯一标识和索引,在远处仓库接受到commit的文件之后,会再计算一遍哈希值然后跟传递过来的哈希值做比较,如果不一致,说明文件在传输时变得不完整,或者磁盘损坏导致文件数据损坏。另外在Git数据库中的东西都是用此哈希值来作索引,而不是靠文件名。
春秋时期,百姓向诸侯国提交一个阶段的商品,为了有个唯一标示标志此次提交的信息(包括商品内容,路径),使用了周天子统一的加密方法对此次商品的提交命名一个代号,其一是为防止其他诸侯国提交时命名冲突,其二,在周天子接收到诸侯国提交的信息时还会加密方法自己再计算一次该提交信息,如果和诸侯国传来的一致说明商品完整,不一致则打回去,告诉诸侯国Boss:你们国家使者在运送途中偷吃了商品,不完整了,我不要了~
大秦王朝没有这些措施,所以相比之下春秋战国时期传输的商品规避了丢失的风险,周天子收到的东西会更完整。
总结:
两个历史时期所面对的境遇不同,所以国家的体制也会有差异,春秋战国时期向往着平等和睦,国家之间可以方便共同发展(乐观的考虑,暂不去想诸侯国的互相争斗~),而秦朝的时候向往着大一统保证权力的高度集中,书同文车同轨,强调规范和安全。回到话题,好多人都在说Git怎么怎么好用,Svn怎么怎么不堪,可是目前为止Svn使用量还是很高,不能因为新的东西出来就唾弃旧的,所谓贫贱之交不可忘,糟糠之妻不下堂,吃两个馒头没吃饱,可是吃第三个的时候突然感觉饱了,你总不能说前两个馒头没用吧。这不过是时代的选择而已,没必要喜新厌旧,根据自己的需要选择适合的工具才会事半功倍。
PS:文中为笔者个人理解,若有技术问题表述异常请指出,我会及时修正,以免误导他人。
本文文字及图片出自 CSDN
你也许感兴趣的:
- 理解 git blame:一篇简介
- 【外评】为什么 Facebook 不使用 Git
- 【外评】Git 的故事:这次没那么有趣
- 【程序员搞笑图片】最刺激的话
- BitKeeper、Linux 和许可纠纷:Linus 如何在 14 天内写出 Git
- 【程序员搞笑图片】Git 音乐播放清单
- 您应该使用的现代 Git 命令和功能
- 在版本控制方面,我们能做得比 Git 更好吗?
- Git 2.40 发布,包括 git jump 工具的更新、cat-file 工具的增强以及提高 Windows 上响应速度
- 告别SVN,Git成“独苗”:GitHub 在 13 年后宣布淘汰Subversion支持
你对本文的反应是: