简单地说:Git是目前世界上最先进的分布式版本控制系统(没有之一)。
首先让我们看看两个小背景
看了上面的小背景,我想大家就很明白了,没错,Git就是干了一件处理版本的事情,并且支持多人协作处理同一个项目。我们理想中,也是Git会做的事情就像这样:
这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的时代。
这个应该就是所说的分布式。Git是没有中心服务器的,每个人机器上都是一个完整的库,我们平时开发代码时的中央服务器其实和我们自己机器上的库内容是完全一样的(格式有点不同,是bare的)。虽然平时大家都是将代码提交到中央服务器上再统一pull别人的代码,但实际情况你可以总是pull张三的库,然后push给李四等等操作。个人认为去中心化是Git(也包括其他分布式VCS)最伟大的改变。去中心化意味着没有权威、没有主力,所有人都是平等的。这概念本身看起来好像没什么,但实际对社区影响是巨大的,去看看 http://github.com
上的fork功能,你可以fork任何一个你喜欢的项目,接着按自己的喜好修改成自己的项目,或是发起pull request请原作者merge你的功能到他们项目里去(这同样也得益于Git另一项与SVN很大不同的功能——分支策略),而且大多数开源项目都会鼓励你去fork它们。这里面没有权威,没有主从,所有人只要有兴趣都可以在其他人的基础上去构建更强大或是更有领域针对性的项目。大家不是为了开发某个项目而来,而是为了贡献更强的功能给社区,这样最终的项目将是整个社区所有人共同努力的结果,将生生世世繁衍不息。当然,去中心化也可能会引发一些问题,比如Linux的各种发行版本有时候让人难以抉择,但相信市场之手会帮我们做出选择。
本地提交好处主要有几点: 1) 断网提交 2) 小步提交。可以对自己的阶段成果有跟踪,并且提高每次变更的安全性 3) 本地库。这个和断网提交是同一个实现,但从需求角度出发则略有不同,主要是说即使只有自己一个人开发项目,也可以轻易的让自己的代码有版本跟踪,而不需要去费力建个什么svn server 4) 本地回滚。这个其实是由于本地库的存在而产生的,但可以减少中央库上的冗余版本
分支策略从技术上来讲是将版本节点化了,即最终的版本状态是树状的。从结果上来讲既是弱化了分支,也是强化了分支。弱化的是分支的概念,强化的是分支的功能。在Git实际开发中分支的分离和merge是属于日常操作,开启和合并分支成本相比SVN要小得多:SVN是复制一份代码到分支目录,Git则是在分支点做一下标记。随便一次冲突就会自动产生分支,所以大家每天都在与分支打交道。这便是弱化了分支的概念,由于分支成本很小,因此使得按功能分支的开发模式(每个分支一个功能,开发完了再merge到主干)变得非常简单,大家可以完全不需要再因为担心SCM成本太高而选用主干开发模式(所有功能都在主干上开发,到了发版本前再分离出分支)。当然Git还有很多其他不错的地方,比如Tag策略(和分支策略一样,做个标记,不像SVN要复制一份过去),下载时会压缩以加快速度,各类提示非常到位
viencoding.com版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/211