简记git与SVN

svn与git是目前比较主流的版本控制系统,在这里简单记录一下它们之间的异同。

 
一,从架构来说,SVN是集中式,git是分布式。
 
集中式的优点是代码高度统一,缺点也很明显就是非常依赖于中央服务器。如果服务器宕机或者本地
 
无法联网,那么你将无法提交更新、还原、对比等,也就无法协同工作。同时SVN上的提交也并非是
 
每次都成功,如果有一个人在你提交的时候先提交,那么就会提示你先更新再提交。SVN原理上只关
 
心文件内容的具体差异,每次记录有哪些文件做了更新并且更新了哪些内容。
 
而分布式的git会在本地克隆一个自己的版本库,在无法联网的时候,依然能够提交文件,查看历史版
 
本记录等。Git中每个版本库都是平等的。与SVN不同,Git只关心文件数据的整体是否发生变化,Git
 
并不保存文件内容前后变化的差异数据,更像是把变化的文件作快照后记录在一个微型的文件系统中
 
(为提高性能,没有变化的文件不会再次保存)。
 
 
二,版本库与工作区的差异
 
SVN的版本库与工作区是分离的。工作区在你本地检出的那个目录,它是一份版本库在某个历史状态
 
下的快照。SVN的工作区中每个目录下都包含一个名为.svn的控制目录(隐藏目录)。
 
git的版本库与工作区在同一个目录下,工作区的根目录有一个.git的子目录。git的工作区必须要有.git
 
目录,它是用来保存元数据和对象数据库的地方,并且Git的工作区下只有一个.git目录,此外再无任何
 
控制目录,如果删除它,则破环了整个历史,版本库也永远失去了。(可以在工作区之外克隆一个版
 
本库,并且经常把提交push到里面,这样就实现了数据备份。)
 
 
三,SVN采用全局版本号,且是连续的。Git是通过对文件的内容或目录的结构计算出一个哈希值,是
 
40为的十六进制字符串,它是全球唯一的。
 
 
四,SVN可以部分检出,而git只能全部检出。
 
 
五,SVN的更新可以使工作区和版本库保持一致,git上通过git fetch(fetch将远程数据库的object拷贝
 
到本地)和git pull(pull相当于fetch+merge)来完成远程更新任务。
 
 
六,提交与分支
 
SVN里的分支就是一个子目录,和普通的路径没有什么本质的区别。而git的分支仅是一个文件,所以
 
你可以在同一个工作目录下快速的在几个分支间切换。git的分支是完全隔离的。
 
SVN的提交是单线索的,它的提交链只有一条。Git的提交是多线索,提交链可以有多条。
 
在svn中,你无法去撤销提交,只能在后续的提交中修正。SVN有一个特性是它的信息从不丢失,即使
 
删除了,也可以在早期版本中找到。
 
Git的代码库属于个人,允许任意修改。Git通过git reset -hard可以永远丢弃最新的一个或几个提交。
 
 
总结:
   
SVN逻辑明确,符合一般人思维习惯;易于管理,集中式服务器更能保证安全性;代码一致性非常
 
高;适合开发人数不多的项目。缺点是,服务器压力太大,数据库容量暴增;如果不能连接到服务器
 
上基本不可以工作。
   
Git适合分布式开发,强调个体;公共服务器压力和数据量都不会太大;离线工作;任意两个开发者之
 
间很容易解决问题。缺点是,学习周期较长,代码保密性差。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值